Caminhos de classpath, problema no linux

5 respostas
A

BOm, estou tendo um certo problema chato a respeito de passagem de parametro no Linux, de tal forma:

java -classpath /usr/local/minha aplicacao/* br.com.model.Executar "parametro1" "parametro2"

Bom… os parametros que eu passo para a aplicacao pode conter espaços então eu envolvo eles em aspas, porem estas aspas vao junto com o valor, eu acabo recebendo o “parametro1” de verdade (com as aspas), já no windows não vem com as aspas… MAs creio que isso é negócio do Linux/windows neh? isso eu sei resolver… porém quero saber se passando um caminho do classpath com espaços como no meu exemplo /usr/local/minha aplicacao/* vou ter problema no Linux?? eu sei que no windows deve envolver em aspas, e isso funciona perfeitamente… porém gostaria de saber no linux como eu posso resolver isso… por favor alguém sabe?

5 Respostas

B

Sim, vai ter problema, porque o Linux / Unix vai expandir o “" para todos os arquivos e subdiretórios que estão no primeiro nível de "/usr/local/minha aplicacao/”. Isso não é feito pelo java e sim pelo interpretador de comandos, ou seja, está fora da jurisdição do java e vai dar problemas.

Outro problema é obviamente o espaço que tem no nome do diretório. O Linux / Unix, como o Windows, precisa de aspas simples ou duplas para lidar com nomes com espaços. Um problema adicional é que muitas ferramentas do Linux / Unix simplesmente não funcionam direito com nomes de arquivos com espaços no meio mesmo usando as aspas, portanto evite tais nomes como a peste.

A

coliquei aspas duplas e simples e "\ " no lugar do espaço e não deu certo…

B

Amigo, você pode renomear seu diretório? Torne seu problema mais simples, resolva-o, e depois veja se consegue resolver o problema (que é mais complexo) de ter espaços em nomes de diretórios. Já aviso que no Linux / Unix é fortemente desaconselhado você usar nomes de diretórios ou arquivos com espaços.

A

sem espaços funciona perfeitamente sem as aspas simples ou duplas…

o duro é fazer esse tipo de recomendação (utilização de nomes sem espaços de diretorio) para o uso do meu aplicativo :?

tentei fazer o SET CLASSPATH=/usr/local/minha aplicacao/*

mas deu o seguinte erro

java.io.IOException: Cannot run program set”: java.io.IOException: error=2, No such file or directory

at java.lang.ProcessBuilder.start(ProcessBuilder.java:474)

at java.lang.Runtime.exec(Runtime.java:610)

at java.lang.Runtime.exec(Runtime.java:448)

at java.lang.Runtime.exec(Runtime.java:345)

at br.pbji.model.command.BuildBJI.execute(BuildBJI.java:47)
B

Leia um livro de Linux / Unix, e mais importante, saiba para que cada comando serve.

E também entre na filosofia do Linux / Unix.

Uma das coisas dessa filosofia é que maiúsculas e minúsculas são diferentes, espaços são relevantes, e praticamente não existem comandos do sistema que estejam em maiúsculas.
]

O comando SET CLASSPATH=… do Windows é equivalente mais ou menos a:

setenv CLASSPATH=…

ou

CLASSPATH=…

ou

export CLASSPATH=…

depende de onde você vai usar. Provavelmente você usará a alternativa 2, a menos que você use o C-shell (alternativa 1) ou então queira escrever um script que mexa nos valores de variáveis de ambiente (nesse caso, é a alternativa 3).

Criado 27 de outubro de 2010
Ultima resposta 27 de out. de 2010
Respostas 5
Participantes 2