Como definir a variável CLASSPATH para uma pasta no Ubuntu

16

Eu sei que export CLASSPATH=/usr/local/java/tools.jar:$CLASSPATHirá adicionar tools.jar ao CLASSPATH, mas quero definir a pasta para o CLASSPATH

como isso

export CLASSPATH=/usr/local/java/lib/:$CLASSPATH

mas não está funcionando.

Ramesh Kotha
fonte

Respostas:

11

Primeiro, em geral, definir o env var CLASSPATHgeralmente causa mais problemas do que resolve - já que nem todos os aplicativos desejam / precisam do mesmo caminho de classe e geralmente quebram quando jarros indesejados ou mesmo desnecessários são incluídos no caminho de classe. Um aplicativo java deve incluir apenas o número mínimo de jars necessário, nem mais nem menos.

Quando você tem aplicativos individuais específicos que exigem que o caminho da classe seja definido, geralmente a opção da linha de comando é a preferida: java -cp path1:path2:... . Os ícones da área de trabalho podem ter seus comandos alterados para incluir essas opções ou os scripts de shell podem ser modificados para incluir essas opções.

Dito isto (e como sempre há exceções à regra), dependendo da versão do java (isso requer java 6 ou posterior), você pode especificar que um diretório inteiro de jars seja adicionado ao caminho de classe adicionando um " *" no final de um diretório; por exemplo, o seguinte:

 /dir1/foo.jar:/dir2/dir3:/dir5/dir6/*:etc...

Significa:

  • /dir1/foo.jar - (o jar único) será adicionado ao caminho da classe;
  • /dir2/dir3- todas as classes não jar neste diretório serão adicionadas ao caminho da classe (deve estar na estrutura apropriada do pacote; por exemplo, com.my.Foo.classdeve estar dentro /dir2/dir3/com/my/Foo.class)
  • /dir5/dir6/*- todos os jars neste diretório (ou seja /dir5/dir6/*.jar) serão adicionados ao caminho de classe. Observe que este " *" não é um curinga (você não pode usar f*.jarnem mesmo *.jar); é um caractere especial indicando "adicionar todos os frascos"

Em geral, se você precisar adicionar um diretório inteiro de jars ao caminho de classe do aplicativo, o aplicativo não foi empacotado corretamente. Em vez disso, o aplicativo deve ter um manifesto contendo a lista de frascos dos quais depende. Ou, no mínimo, apenas um jar deve ser adicionado ao seu caminho de classe, e esse jar pode ter em seu manifesto toda a lista de jarros em algum subdiretório.

Michael
fonte
Demoro mais de 5 horas para descobrir isso no ubuntu 12.04. Depois de compilar um arquivo e executar a classe, duas coisas são importantes. 1. Se você usa o pacote em sua classe. E você precisa usar "java -cp. ClassName" na pasta pai do pacote. 2. Você deve usar ".:" Like "java -cp.: / Usr / lib / jvm / java-1.6.0-openjdk-i386 / jre / lib / *: / dir2 / jarlib / *".
Zhihong
@zhihong, você deve considerar o uso de um IDE como o netbeans, deixando-o adiar para a ferramenta de compilação em uso, que realmente configura seu caminho de classe. No Netbeans, configure um novo projeto usando maven ou gradle (ou ant - mas isso fica muito complicado ao lidar com dependências (consulte também: tarefas de maven ant, que eu prefiro do que ivy)). Gradle é atualmente a coisa 'quente', fwiw; você deve tentar. Além disso, (1) você deve sempre usar nomes de pacotes; e (2) nunca é necessário incluir classes no diretório jvm no caminho de classe; eles já estão no caminho de classe "boot".
11134 Michael
Obrigado por sua sugestão. Na verdade, eu uso o eclipse, e o código é executado corretamente lá, mas quando o executo no terminal, obtemos a "ClassNotFoundException". Eu tentei várias maneiras de adicionar a lib / jar externa, mas tudo falhou. Por fim, ele funciona incluindo o diretório jvm e o lib / jar externo na linha de comando WITH. Mas, tentei hoje, você está correto, o diretório jvm não é necessário.
Zhihong
2

se você deseja definir o caminho de classe permanentemente, 1) descubra onde o java está instalado .. você pode usar "whereis java" O openjdk-7/6 está em / usr / lib / jvm / .....

2) precisamos configurar o CLASSPATH em / etc / environment

  sudo gedit /etc/environment

3) adicione os seguintes gostos .. (NÃO DEIXE ALGUNS ESPAÇOS AO TIPO) (personalize de acordo com sua versão e instalação do java) (este caminho inicial é para o jdk aberto 7)

   JAVA_HOME="/usr/lib/jvm/java-7-openjdk-i386/bin"

   export JAVA_HOME

   CLASSPATH=".:/usr/lib/jvm/java-7-openjdk-i386/lib:/home/laptop/Desktop/a2"

   export CLASSPATH

separar o diretório por ":"

rightkushagra
fonte
Por que todo mundo está adicionando "{JAVA_HOME} / lib" ao caminho de classe? Não é necessário, nem mesmo uma boa ideia. Por outro lado, definir o env CLASSPATH também é uma má idéia, a menos que esteja em um script shell, apenas para esse script; nesse caso, a opção da linha de comandos "-cp" para java ainda seria preferível.
11134 Michael
0

terminal aberto e tipo

sudo nano ~ / .bashrc

adicione todas as exportações que você precisa, como ...

exportar JAVA_HOME = / usr / local / java / jdk1.6.0_06 (seu caminho)

exportar ANT_HOME = / opt / ant / apache-form-1.9.4

finalmente reinicie o terminal para que as alterações entrem em vigor

dezesseis
fonte