2012-03-30 13 views
38

Stavo scrivendo un semplice programma che utilizza un'applicazione Java (non un'applicazione che ha progetti, ma un'applicazione all'interno di un progetto; .java) che ha un singolo frame. Entrambi i file sono .java, quindi non posso scrivere un manifest richiesto dal JAR. MyApp.java inizia come una classe con pacchetto, importa quindi la classe pubblica MyApp {e ha una funzione principale, ma è ancora .java! Lo sto scrivendo in JDeveloper 11g se aiuta ...Come creare un JAR da .java

Qualche idea su come creare un JAR da questi file?

+1

Penso che questo possa essere ottenuto molto più facilmente utilizzando lo strumento di packaging come ANT o Maven – Churk

+0

D'accordo con Chuck. Dai un'occhiata a ANT. Gli IDE sono ottimi per lo sviluppo, ma è necessario capire come funzionano le cose. i file java sono compilati tramite javac in file .class, dopo di che i file .class possono essere inseriti in un jar con il comando jar. (Ant ha compiti per farlo, anche jdeveloper ha qualche wizard per farlo). – BigMike

+0

JDeveloper stesso dovrebbe avere la capacità di creare file jar. Una rapida ricerca su google fornisce un howto qui: http://tompeez.wordpress.com/2011/06/01/creating-a-jar-file-in-jdeveloper/ – stolzem

risposta

15

Basta con la riga di comando:

javac MyApp.java 
jar -cf myJar.jar myApp 

IDE Certo evitare l'uso del terminale a riga di comando

+7

Quanto sopra funzionava, tuttavia avevo bisogno di specificare il '.class' di myApp. Quindi anche qui 'jar -cf myJar.jar myApp.class' – Navigatron

+2

Errori di ortografia, e si presuppone che non ci sia alcuna istruzione sul pacchetto. Non adeguato – EJP

53

Aprire un prompt dei comandi.

Vai alla directory in cui si hanno i file .java

una cartella di generazione

Run compilazione java dalla riga di comando

javac -d ./build *.java 

se non ci sono errori, nella build directory dovresti avere l'albero della tua classe

passare alla directory di costruzione e fare un

jar cvf YourJar.jar * 

Per aggiungere manifesto controllo in linea comando jar interruttori

+0

Ho provato a compilare dalla riga di comando, ma ottengo un errore: Frame1.java:23: il pacchetto oracle.jdeveloper.layout non esiste Come risolverlo? Ci scusiamo per le domande per principianti ... – user1303007

+0

devi costruire il classpath facendo riferimento a tutte le librerie a cui fai riferimento nelle tue classi. Verificare con l'installazione di jdeveloper, ci dovrebbe essere qualche esempio di build ant (file build.xml) e almeno un paio di buoni tutorial su come usare jDeveloper con ANT sul sito di Oracle. – BigMike

+0

@ user1303007 dai un'occhiata qui http://www.oracle.com/technetwork/articles/adf/part4-098813.html – BigMike

4

Questo può essere fatto senza terminale, direttamente dalla IDE. Netbeans, per esempio.

  1. Creare un progetto separato con i pacchetti (Crea progetto - Java - Libreria di classi Java).
  2. Metti qui le tue classi .java.
  3. Costruisci questo progetto.
  4. Vai alla cartella del progetto e trova lì le cartelle di build e dist.
  5. Trova il file .jar nella cartella dist.
  6. Ottieni il tuo altro progetto e aggiungi questo file .jar alle librerie di progetto.
  7. Ora puoi fare riferimento alle classi da questa libreria e dai relativi metodi direttamente dal codice, se l'importazione viene eseguita automaticamente per te.
2

Spesso si vuole specificare un manifesto, in questo modo:

jar -cvfm myJar.jar myManifest.txt myApp.class 

che recita: "creare verbose jarFilename manifestFilename", seguito dai file che si desidera includere. Verbose significa stampare messaggi su ciò che sta facendo.

Si noti che il nome del file manifest fornito può essere qualsiasi cosa, poiché lo jar lo rinomerà automaticamente e lo inserirà nella directory corretta all'interno del file jar.

5

Ok questa è la soluzione che avrei voluto trovare, invece qui lo scrivo:

Innanzitutto creare la struttura di directory corrispondente al pacchetto definito per il file .java, se è my.super.application creare la directory "mio" e al suo interno "super" e al suo interno il file .java "App.java"

quindi da linea di comando:

javac -cp /path/to/lib1.jar:/path/to/lib2.jar path/to/my/super/App.java 

Avviso quanto sopra comprenderà più librerie, se sotto windows usa "," per separare più file altrimenti e in condizioni di utilizzo di GNU/Linux ":" Per creare un file jar

jar -cvfe App.jar App my/app/ 

quanto sopra creerà l'applicazione con il suo corrispondente manifesto che indica l'applicazione come la classe principale.

L'inclusione delle librerie richieste all'interno del file jar non è possibile utilizzando i parametri della riga di comando java o jar.

si può invece:

  1. estrarre manualmente le librerie nella cartella principale del file jar
  2. usare un IDE come Netbeans e inserire una regola all'interno della sezione post-barattolo di nbproject/build-impl. xml per estrarre le librerie all'interno del vaso. Vedi sotto.
<target name="-post-jar"> 
     <!-- Empty placeholder for easier customization. --> 
     <!-- You can override this target in the ../build.xml file. --> 
    <jar jarfile="${dist.jar}" update="true"> 
      <zipfileset src="${dist.jar}" includes="**/*.class" /> 
      <zipfileset src="${file.reference.iText-1.0.8.jar}" includes="**/*"/> 
     <zipfileset src="${file.reference.itextpdf-3.2.1.jar}" includes="**/*"/> 
    </jar> 
    </target> 

i nomi file.reference si trovano all'interno del file project.properties dopo aver aggiunto le librerie per l'IDE Netbeans.