Executar classe no arquivo Jar

176

Se você tem um arquivo jar chamado myJar.jarlocalizado em / myfolder e deseja usar a classe chamada a myClasspartir dele, como proceder na linha de comando?

Eu pensei que seria entrar no diretório e dizer java -cp myJar.jar.myClassmas isso não está funcionando. Qualquer ajuda seria apreciada.

jim
fonte
java -cp myJar.jar myClassfunciona bem para mim - você tem um período falso na sua linha de comando em vez de um espaço?
21811 Chris Dodd
1
O que você quer dizer quando diz que deseja 'usar' essa classe? Existe um método principal que você deseja chamar em particular?
Marsellus Wallace

Respostas:

256

Use java -cp myjar.jar com.mypackage.myClass.

  1. Se a classe não estiver em um pacote, simplesmente java -cp myjar.jar myClass.

  2. Se você não estiver no diretório em que myJar.jarestá localizado, poderá fazer:

    1. Nas plataformas Unix ou Linux:

      java -cp /location_of_jar/myjar.jar com.mypackage.myClass

    2. No Windows:

      java -cp c:\location_of_jar\myjar.jar com.mypackage.myClass

Bitmap
fonte
10
Apenas adicionando a ele - caso o com.mypackage.myClass (no exemplo acima) tenha dependências em outros jars, execute-o da seguinte forma: java -cp independentfile1.jar; dependentefile2.jar; c: \ location_of_jar \ myjar.jar com. mypackage.MyClass
akjain
2
Um possível caminho de falha a ser observado, caso isso não funcione: verifique se o caminho completo da sua classe corresponde exatamente ao que está no seu arquivo jar. Se você descompactar -l /location-of-jar/myjar.jar e vir algo diferente de com / mypackage / myClass, este é o seu problema. (Por exemplo, se você vê bin / com / mypackage / myClass, você deveria ter cd'ed no escaninho para construir o seu arquivo jar, o que você tem não vai funcionar.)
Scott C Wilson
use MyClass, não myClass
Breno Inojosa
Ao tentar o acima, estou recebendo o erro Exceção no segmento "main" java.lang.NoClassDefFoundError: pepino / api / cli / Main em com.company.project.demo.bdd.runner.Execute.main (Execute.java:20 ) Causado por: java.lang.ClassNotFoundException: cucumber.api.cli.Main em java.net.URLClassLoader.findClass (fonte desconhecida) em java.lang.ClassLoader.loadClass (fonte desconhecida) em sun.misc.Launcher $ AppClassLoader. loadClass (Origem desconhecida) em java.lang.ClassLoader.loadClass (Origem desconhecida) ... mais 1
Vaibhav_Sharma
24

Você quer:

java -cp myJar.jar myClass

A documentação fornece o seguinte exemplo:

C:> java -classpath C:\java\MyClasses\myclasses.jar utility.myapp.Cool
Richard Campbell
fonte
18

Existem dois tipos de arquivos JAR disponíveis em Java:

  1. Arquivo jar executável / executável que contém o arquivo de manifesto. Para executar um jar Runnable, você pode usar java -jar fileName.jaroujava -jar -classpath abc.jar fileName.jar

  2. Arquivo jar simples que não contém um arquivo de manifesto; portanto, você simplesmente executa sua classe principal, fornecendo seu caminho java -cp ./fileName.jar MainClass

Gaurav Singh
fonte
6

Supondo que você esteja no diretório em que o myJar.jararquivo está e que myClasspossui um public static void main()método:

Você usa a seguinte linha de comando:

java -cp ./myJar.jar myClass

Onde:

  1. myJar.jarestá no caminho atual , observe que .não está no caminho atual na maioria dos sistemas. Um caminho totalmente qualificado é preferido aqui também.

  2. myClassé um caminho de pacote totalmente qualificado para a classe, o exemplo assume que myClassestá no pacote padrão, o que é uma prática recomendada, se estiver em um pacote aninhado com.mycompany.mycode.myClass.


fonte
1

Esta é a maneira correta de executar um .jar, e qualquer classe que .jardeveria ter main()e os seguintes são os parâmetros:

java -DLB="uk" -DType="CLIENT_IND" -jar com.fbi.rrm.rrm-batchy-1.5.jar
ubersucks
fonte