Come utilizzare i caratteri JAR con caratteri jolly durante la compilazione?

Ho il seguente in un file java (MyRtmpClient.java):

import org.apache.mina.common.ByteBuffer; 

e ByteBuffer trova all’interno di un file JAR (con la corretta struttura di directory, ovviamente). Quel file jar e gli altri di cui ho bisogno si trovano nella stessa directory del file .java.

Quindi compilo con la linea:

 javac -cp ".;*.jar" MyRtmpClient.java 

Ma ottengo l’errore:

MyRtmpClient.java:3: package org.apache.mina.common does not exist
import org.apache.mina.common.ByteBuffer;

Come posso includere i file jar nel mio progetto?

la tua riga di comando è corretta, ma ci sono alcune considerazioni:

  • devi avere javac> = 1.6, perché solo in quella versione il compilatore analizza “*” come vari file JAR.
  • devi avere Windows, perché “;” è il separatore di percorso solo per quel sistema operativo (non funziona su Unix, il separatore di percorso su Unix è “:”).

Suppongo che il file JAR abbia la struttura di directory corretta come hai affermato.

javac non capisce * .jar nell’argomento classpath. È necessario specificare esplicitamente ciascun jar. per esempio

 javac -cp ".;mina.jar" MyRtmpClient.java 

Nel tuo caso, penso che JAVAC non possa trovare il file jars.

Per favore prova:

project_path
– lib \ a.jar
– src \ package \ b.java

 cd @PROJECT_PATH javac -classpath lib\a.jar src\package\b.java 

In javac JDK 6 e versioni successive è ansible utilizzare ( notare la mancanza di .jar ):

 javac -cp ".;*" MyRtmpClient.java 

per citare javac – compilatore del linguaggio di programmazione Java

Come particolare comodità, un elemento del percorso di class contenente un nome di base di * è considerato equivalente alla specifica di un elenco di tutti i file nella directory con l’estensione .jar o .JAR.

Ad esempio, se la directory pippo contiene a.jar e b.JAR, l’elemento percorso class foo / * viene espanso in A.jar; b.JAR, tranne che l’ordine dei file jar non è specificato. Tutti i file jar nella directory specificata, anche nascosti, sono inclusi nell’elenco. Una voce classpath costituita semplicemente da * si espande in un elenco di tutti i file jar nella directory corrente.

Se disponi di programmi di utilità a tua disposizione (ad esempio stai lavorando su Linux), potresti fare:

 javac -cp .:`find * -name "*.jar" | tr "\n" ":"` MyRtmpClient.java 

Verranno aggiunti tutti i file jar nella directory corrente e verranno aggiunte tutte le sottodirectory (il comando shell elenca tutti i file jar e inserisce i due punti come separatori tra di loro).


Spiegazione:

  • una coppia di apici inversi ( ` ) denota i comandi della shell da eseguire,
  • find * -name "*.jar" trova ed elenca tutti i file jar nella gerarchia la cui root è la cartella corrente,
  • la barra verticale ( | ) è il tubo; collega l’output di find all’input del comando successivo,
  • tr "\n" ":" sostituisce tutti i caratteri di nuova riga con i caratteri dei due punti .

Probabilmente sotto la syntax funzionerà con il comando windows dos

 javac -cp ".;first.jar;second.jar;third.jar" MyRtmpClient.java 

In Java 8, l’opzione “.; *” Ecc. Che sono menzionati sopra non sembra funzionare. Ho provato e ho trovato che: javac -cp '/*' MyRtmpClient.java

lavori:

può essere / usr / local / classs / * o / home / developer / MyProject / *

prova a includere il file jar nella riga di comando, in questo modo:

javac MyRtmpClient.java ByteBuffer.jar

Non puoi usare -cp con Javac . Devi usare -classpath invece (assumendo che le altre impostazioni siano corrette).