Nome binário no programa Java Compilado por GCJ
-
24-09-2019 - |
Pergunta
Existe alguma maneira, de um programa Java compilado pelo GCJ, para descobrir o nome do executável que o usuário executou para iniciar o programa?
Em C, Argv [0] (de dentro principal) é o nome, mas em Java, a matriz args dada a Main contém apenas os argumentos da classe principal. Ao executar com uma linha de comando java normal, isso faz algum sentido, porque o executável sempre seria Java (ou java.exe).
Ao executar um programa Java que foi compilado pelo GCJ, no entanto, o nome do executável que o usuário executou pode ser uma informação útil. Idealmente, eu gostaria de encontrar esse nome sem recorrer a abordagens específicas da plataforma, como leitura /proc (e qualquer que seja o equivalente para o Windows), mas talvez isso não seja possível.
Solução
Depois de muita pesquisa na pesquisa de código do Google, descobri que o nome do programa está escondido no gnu.gcj.progname
propriedade. Programa de amostra:
public class ProgName {
public static void main(String... args) {
System.out.println(System.getProperty("gnu.gcj.progname"));
}
}
Editado para adicionar: gnu.gcj.progname
está documentado em libgcj
Propriedades de tempo de execução Além disso, felizmente, isso não é apenas um detalhe de implementação interna.