Каждый ответ, который я нашел, относящийся к этой теме, был специально для Android.
То, что я смог сделать до сих пор, это после сборки - в файле build.gradle получите хэш Git Commit, а затем поместите его либо в файлы манифеста, либо в папку «Resources» внутри комплекта.
task create_gitCommit << {
if (project.getName().equals("com.freewire.mobi.unitconfigurationimpl")) {
String s = null;
String temp = null;
try {
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("git rev-parse --short HEAD");
System.out.print("The following the output of the pwd command ")
System.out.println(rt.exec("pwd"))
System.out.println(System.getProperty("user.dir"))
System.out.println(GroovySystem.version)
BufferedReader stdInput = new BufferedReader(new
InputStreamReader(proc.getInputStream()));
// read the output from the command
System.out.println("Here is the standard output of the command:\n");
if ((temp = stdInput.readLine()) != null) {
s = temp;
System.out.println(s);
File file = new File("com.freewire.mobi.unitconfigurationimpl/src/main/resources/gitCommitHash.txt") {}
file.createNewFile();
file.write s
}
} catch (IOException e) {
System.out.println("EXCEPTION CAUGHT, something is not going correct");
System.out.println(e.toString());
}
}
}
Проблема в том, что после запуска кода на виртуальной машине я попытался получить доступ к пути к файлу, а затем опубликовать переменную. Но я не думаю, что файловая структура на удаленной машине такая же, как на моей локальной.
private String getGitTextFilePath() throws Exception {
Resources.toString(Resources.getResource(fileContents),
Charsets.UTF_8);
ClassLoader classloader =
Thread.currentThread().getContextClassLoader();
InputStream is =
classloader.getResourceAsStream("gitCommitHash.txt");
InputStreamReader streamReader = new
InputStreamReader(is, StandardCharsets.UTF_8);
BufferedReader reader = new
BufferedReader(streamReader);
for (String line; (line = reader.readLine()) != null;) {
System.out.println(line);
}
System.out.println(is.toString());
LOG.info("GIT TEXT file path " +
is.toString());
return is.toString();
}
public String getGitCommitHash() throws Exception{
String everything = "Fake";
String path = getGitTextFilePath();
LOG.info("Working Directory = " +
System.getProperty("user.dir"));
try{
LOG.info("Inside Try 1");
LOG.info(fileContents);
BufferedReader br = new BufferedReader(new
FileReader(path));
LOG.info("Inside Try 2");
StringBuilder sb = new StringBuilder();
String line = br.readLine();
LOG.info("Inside Try 3");
while (line != null) {
sb.append(line);
sb.append(System.lineSeparator());
line = br.readLine();
}
everything = sb.toString();
br.close();
LOG.info("Inside the try: " + everything);
return everything;
}
catch(IOException e){
System.out.println("Something went wrong with trying
to read the Git Commit Hash File :,)");
}
return everything;
Вариант 1 - выяснить, как узнать, что это за файловая структура, и собрать GitCommitHash, который я поместил в указанные папки.
Вариант 2 - есть ли способ получить Git Commit Hash удаленно? Это легко на моей машине, так как папка, в которой я работаю, когда сборка подключена к репо. Можно ли получить хеш коммита с удаленного компьютера внутри самого кода Java?.
tl; dr - в build.gradle я могу поместить Git Commit Hash в файл в нужном мне пакете. Либо в папке ресурсов, либо в файле манифеста. Это работает.
Однако после развертывания кода на удаленном сервере https://www.eurotech.com/en/products/iot/multi-service-iot-edge-gateways/reliagate-20-25, я не знаю, как получить доступ к этому файлу. Как мне получить файловую структуру? Или я могу каким-то образом получить доступ к Git с удаленного сервера, используя Java для получения Git Commit Hash.