Como incluir arquivos jar com o arquivo java e compilar no prompt de comando

121

Eu tenho 3 arquivos jar e um arquivo .java que depende desses arquivos jar. Como compilar o arquivo .java com esses arquivos jar usando um prompt de comando?

user1177567
fonte
9
tipo "javac -help"
Sean Patrick Floyd
2
Esperamos que esta ajuda você ..
Fahim Parkar
2
Nota para self: você deve usar o sinalizador -cp / -classpath antes do nome do arquivo java que deseja executar, caso contrário, ele ignorará o sinalizador. java -cp ".;magic.jar" Fooestá ok java Foo -cp ".;magic.jar"não é.
Dmitry

Respostas:

108

Você pode incluir seus arquivos jar no comando "javac" usando a opção "-cp".

javac -cp ".:/home/path/mail.jar:/home/path/servlet.jar;" MyJavaFile.java

Em vez de "-cp", você também pode usar "-classpath"

javac -classpath ".:/home/path/mail.jar:/home/path/servlet.jar:" MyJavaFile.java

Você pode incluir os jars toda vez que compilar, configurando a variável de ambiente "CLASSPATH" corretamente. A variável de ambiente armazenará o caminho em que os jars e classes que precisam ser usados ​​para compilar / executar qualquer arquivo java. Você não precisará incluir os frascos individualmente toda vez que compilar seu arquivo.

Máquinas diferentes têm métodos diferentes para definir o caminho de classe como uma variável de ambiente. Os comandos para Windows, Linux, etc são diferentes.

Você pode encontrar mais detalhes neste blog .

http://javarevisited.blogspot.com/2011/01/how-classpath-work-in-java.html
kensen john
fonte
7
javac -classpath ".:/home/path/mail.jar;/home/path/servlet.jar" MyJavaFile.javatrabalhou para mim. Eu estava usando mac. Eu li em algum lugar que ':' é usado para unix.
Sri
2
Eu usei esse comando, mas quando tentei acessar a classe presente no arquivo jar, estou obtendo ClassNotFoundException.
Mohammed Rampurawala
3
o que .:faz? desculpe se é uma pergunta idiota, mas não é óbvio para mim.
Miranda
1
@kensen. Erro de tipografia. substituir: (dois pontos) por ponto-e-vírgula (;)
Pankaj Shinde
Acima não funcionou para mim no ubuntu. Eu tentei sem aspas e funcionou. Ex. javac -cp .:/home/path/mail.jar:/home/path/servlet.jar; MyJavaFile.java
Alfaz Jikani 14/09/19
24

Por favor, tente no Linux

javac -cp jarfile source file 

EXEMPLO: -

javac  -cp .:/jars/* com/template/*.java
Jamsheer
fonte
Quando tento o EXEMPLO: - , com .:/jarssubstituído pelo diretório em que meus arquivos JAR estão localizados, recebo a mensagem de erro javac: invalid flag: /location/of/first/jar/file.jar.
Arturo don Juan
stackoverflow.com/questions/27915204/… refere-se a isto, ele pode resolver seu problema
Jamsheer
20

A sintaxe funcionará no comando windows dos:

javac -cp ".;first.jar;second.jar;third.jar" MyJavaFile.java
user2573056
fonte
4
Após a execução bem-sucedida do comando acima, como executar o arquivo de classe java?
Yash Agrawal
java -cp first.jar: second.jar: third.jar MyFile
Krsna Chaitanya
15

Tente adicionar todos os arquivos jar de dependência ao caminho da sua classe por meio de configurações de variáveis ​​de ambiente ou use as etapas abaixo:

  1. Abra o prompt de comando.
  2. Mude o diretório para o local do seu arquivo java que você deseja compilar.
  3. Defina o caminho da classe para seus arquivos jar de dependência, conforme mostrado abaixo:

    set classpath=C:\Users\sarath_sivan\Desktop\jars\servlet-api.jar; C:\Users\sarath_sivan\Desktop\jars\spring-jdbc-3.0.2.RELEASE; C:\Users\sarath_sivan\Desktop\jars\spring-aop-3.0.2.RELEASE;

  4. Agora, você pode compilar seu arquivo java. (comando javac YourJavaFile.java:)

Espero que isso resolva seu problema de dependência.

Sarath Kumar Sivan
fonte
15

Os seguintes são passos,

  1. Copie todos os jars e seu arquivo .java na mesma pasta (será fácil mencionar nomes de arquivos em vez de mencionar o caminho longo. Embora você possa manter jar e .java em pastas separadas).

  2. Compilar,

    javac -cp .:<file_1_name>.jar:<file_2_name>.jar <prog_name>.java
  3. Executar,

    java -cp .:<file_1_name>.jar:<file_2_name>.jar <prog_name>

Eu espero que isso ajude!

imbond
fonte
1
Obrigado por também mostrar como executar. O que os dois pontos fazem de novo? É atual diretório e separador de arquivos?
ThisClark
Sim, é o diretório atual e um separador de arquivos Unix (no Windows, é um ponto e vírgula).
MathuSum Mut
6

Isso criará o arquivo .class:

javac -classpath "[jarname with specified path]" [java filename]

Isso executará o arquivo de classe:

java -cp [jarname with specified path]: [java filename]
Isaq
fonte
1
comando java está mostrando erro causado por: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory Eu quero compilar ** javac -classpath "/home/scorncer/Downloads/spark-core-2.3.jar" MyFile.javae correr ** java -cp /home/scorncer/Downloads/spark-core-2.3.jar: MyFile.java also i tried java -cp /home/scorncer/Downloads/spark-core-2.3.jar: MyFile
Yash Agrawal
5

Tente isto.

javac -cp .:jars/jar1:jars/jar2:jars/jar3 com/source/*.java
Shravya
fonte
2

Você precisa especificar as dependências no tempo de compilação e no tempo de execução

Para compilar, use este formato

javac -cp "*.jar;classfile_path" filename.java

Exemplo:

javac -cp "ojdbc6.jar;c:\programs" Main.java
ArockiaRaj
fonte
Essa resposta, embora correta, não parece realmente adicionar nada que as outras respostas ainda não digam. Se houver alguma diferença importante entre essa e as outras respostas, seria melhor explicar por que sua resposta é diferente.
DaveyDaveDave
Você mencionou a especificação de dependências no tempo de execução e o tempo de compilação, mas não explica como especificá-las no tempo de execução.
Michael Fulton
1

algumas vezes fazendo as seguintes alterações funcionarem:

java -cp ".;%CLASSPATH%" classfilename 

Nota: NO Windows. Para linux, use $CLASSPATH.

Guru
fonte
1
javac -cp jars/jar1:jars/jar2:jars/jar3 abc.java
pratap
fonte
5
Embora esse código possa resolver a questão, incluindo uma explicação de como e por que isso resolve o problema realmente ajudaria a melhorar a qualidade da sua postagem e provavelmente resultará em mais votos positivos. Lembre-se de que você está respondendo à pergunta dos leitores no futuro, não apenas à pessoa que está perguntando agora. Por favor edite sua resposta para adicionar explicações e dar uma indicação do que limitações e premissas se aplicam.
bip duplo
0

Se você estiver usando o Ubuntu:

/opt/JavaServices/sqlite $ export CLASSPATH=/opt/JarFiles/XXXX.jar:/opt/JarFiles/XXXX.jar:/opt/JavaServices/;javac SQLiteSample.java

Ir para o local da pasta (estrutura fora do pacote)

/opt/JavaServices $ export CLASSPATH=/opt/JarFiles/XXXXX.jar:/opt/JarFiles/XXXXX.jar:/opt/JavaServices/;java sqlite.SQLiteSample

Nota: Consulte os locais dos arquivos e os nomes dos pacotes

srihari
fonte
-1

Para Windows

  1. conecte-se ao diretório em que os arquivos java estão presentes no prompt de comando.
  2. defina o caminho da classe (aqui d = nome da pasta) defina o caminho da classe = C: \ d1 \ d2 \ d3 \ d4 \ d5 \ d6 \ d7.jar;
  3. pressione enter e
  4. agora compile o arquivo java javac filename.java
prenúncio
fonte