Come usare le classi dai file .jar?


134

Ho letto i tutorial Java su Sun per i file JAR, ma non riesco ancora a trovare una soluzione al mio problema. Ho bisogno di usare una classe da un file jar chiamato jtwitter.jar, ho scaricato il file e ho provato a eseguirlo (ho scoperto ieri che i file .jar possono essere eseguiti facendo doppio clic su di essi) e Vista mi ha dato un errore dicendo " Impossibile caricare l'attributo Manifest di classe principale da [percorso] /jtwitter.jar ".

Il tipo che ha codificato il file .jar vuole che lo importi, ma dove posso archiviare il file .jar per importarlo nel mio codice? Ho provato a mettere sia il file .jar che il mio file .java nella stessa directory, non ha funzionato.

Il file per cui sto cercando di lavorare è qui: http://www.winterwell.com/software/jtwitter.php

Sto usando JCreator LE.


13
Perché c'è un downvote? Secondo me, è una buona domanda e ci sono informazioni interessanti nelle risposte! (+1)
guerda,

Risposte:


34

Non tutti i file jar sono eseguibili.

Ora, devi importare le classi, che sono lì sotto il vaso, nel tuo file java. Per esempio,

import org.xml.sax.SAXException;

Se stai lavorando su un IDE, devi fare riferimento alla sua documentazione. O almeno specifica quale stai usando qui in questo thread. Ci consentirebbe sicuramente di aiutarti ulteriormente.

E se non stai usando alcun IDE, per favore guarda l' opzione javac -cp . Tuttavia, è molto meglio comprimere il programma in un jarfile e includervi tutti i messaggi necessari jar. Quindi, al fine di eseguire il tuo jar, come,

java -jar my_program.jar

dovresti avere un META-INF/MANIFEST.MFfile nel tuo jar. Vedi qui , per come fare.


vecchio, lo so, ma in realtà non c'è bisogno di importnulla - evita semplicemente di dover scrivere il nome della classe pienamente qualificato che mai venga usata la classe, consentendo solo il semplice nome della classe ( SAXException) - tipo di semplice importazione dello spazio dei nomi
user85421

173

Diciamo che dobbiamo usare la classe Classnamecontenuta nel file jarorg.example.jar

E la tua fonte è nel file In mysource.javaquesto modo:

import org.example.Classname;

public class mysource {
    public static void main(String[] argv) {
    ......
   }
}

Innanzitutto, come vedi, nel tuo codice devi importare le classi. Per fare ciò di cui hai bisognoimport org.example.Classname;

In secondo luogo, quando si compila l'origine, è necessario fare riferimento al file jar.

Si prega di notare la differenza nell'uso :e ;durante la compilazione

  • Se hai un sistema operativo unix come:

    javac -cp '.:org.example.jar' mysource.java
  • Se sei sotto Windows:

    javac -cp .;org.example.jar mysource.java

Successivamente, si ottiene il file bytecode mysource.class

Ora puoi eseguire questo:

  • Se hai un sistema operativo unix come:

    java -cp '.:org.example.jar' mysource
  • Se sei sotto Windows:

    java -cp .;org.example.jar mysource

4
Potresti spiegare questa notazione un po 'di più? Ciò ha risolto il mio problema, ma sfortunatamente non ho IDEA sul significato del punto e virgola / due punti in questo caso particolare.
cemulare il

2
Questa storia di punto e virgola / colon mi è costata solo l'intera giornata. Almeno l'ho trovato ora, grazie!
Maxim Zubarev,

1
@ChaseMeadors Il punto e virgola / due punti significa essenzialmente "e" qui. Si sta separando .da org.example.jar.
duozmo,

Se stai scremando, fai attenzione alla maggior parte delle *PATHvariabili: i file .jar devono essere nominati individualmente .
duozmo,

15

Devi aggiungere il file jar nel percorso di classe. Per compilare la tua classe java:

javac -cp .;jwitter.jar MyClass.java

Per eseguire il codice (a condizione che MyClass contenga un metodo principale):

java -cp .;jwitter.jar MyClass

Puoi avere il file jar ovunque. Quanto sopra funziona se il file jar si trova nella stessa directory del file java.


7

Devi inserire il file .jar nel tuo percorso di classe durante la compilazione / esecuzione del codice. Quindi usi solo le importazioni standard delle classi nel file .jar.


6

Come dice workmad3, devi avere il file jar nel tuo percorso di classe. Se stai compilando dalla riga di comando, ciò significherà usare il flag -classpath. (Evita la variabile d'ambiente CLASSPATH; è un dolore al collo IMO.)

Se stai utilizzando un IDE, facci sapere quale e possiamo aiutarti con i passaggi specifici di tale IDE.


La variabile env classpath è utile se stai usando script o qualcosa come firedaemon per eseguire la tua app. È solo un dolore quando lo usi a livello globale :)
workmad3

Mi piace ancora vederlo esplicitamente.
Jon Skeet,

Sono d'accordo, mi piace vederlo esplicitamente.
J3r3myK,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.