Como curinga include arquivos JAR ao compilar?

Eu tenho o seguinte em um arquivo java (MyRtmpClient.java):

import org.apache.mina.common.ByteBuffer; 

e ByteBuffer está dentro de um arquivo JAR (com a estrutura de diretórios adequada, é claro). Esse arquivo jar e outros que eu preciso estão no mesmo diretório que o arquivo .java.

Então eu compilo com a linha:

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

Mas eu recebo o erro:

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

Como posso include arquivos jar no meu projeto?

sua linha de comando está correta, mas há algumas considerações:

  • você deve ter javac> = 1.6, porque somente nessa versão o compilador analisa o “*” como vários arquivos JAR.
  • você deve estar executando o Windows, porque “;” é o separador de caminho apenas para esse sistema operacional (ele não funciona no Unix, o separador de caminho no Unix é “:”).

Eu estou supondo que o arquivo JAR tem a estrutura de diretórios adequada como você afirmou.

O javac não entende * .jar no argumento classpath. Você precisa especificar explicitamente cada jar. por exemplo

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

No seu caso, acho que o JAVAC não conseguiu encontrar o arquivo do jars.

Tente por favor:

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

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

Em javac JDK 6 e acima Você poderia usar ( note falta de. Jar ):

 javac -cp ".;*" MyRtmpClient.java 

para citar javac – compilador de linguagem de programação Java

Como uma conveniência especial, um elemento de caminho de class contendo um nome de base de * é considerado equivalente à especificação de uma lista de todos os arquivos no diretório com a extensão .jar ou .JAR.

Por exemplo, se o diretório foo contiver a.jar e b.JAR, o elemento de caminho de class foo / * será expandido para A.jar; b.JAR, exceto que a ordem dos arquivos jar não é especificada. Todos os arquivos jar no diretório especificado, mesmo os ocultos, são incluídos na lista. Uma input de caminho de class que consiste simplesmente em * é expandida para uma lista de todos os arquivos jar no diretório atual.

Se você tiver utilitários à sua disposição (por exemplo, você está trabalhando com o Linux), você poderia fazer:

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

Todos os arquivos jar no diretório atual e todos os seus subdiretórios serão adicionados (o comando shell lista todos os arquivos jar e coloca os dois pontos como separadores entre eles).


Explicação:

  • par dos backticks ( ` ) denota comandos shell a serem executados,
  • find * -name "*.jar" localiza e lista todos os arquivos jar na hierarquia cuja raiz é a pasta atual,
  • barra vertical ( | ) é tubo; conecta a saída do find à input do próximo comando,
  • tr "\n" ":" substitui todos os caracteres de nova linha por caracteres de dois pontos .

Provavelmente abaixo da syntax funcionará no comando windows dos

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

No Java 8, as opções “.; *” Etc., mencionadas acima, parecem não funcionar. Eu tentei e descobri que: javac -cp '/*' MyRtmpClient.java

trabalho:

pode ser / usr / local / classs / * ou / home / developer / MyProject / *

tente include o arquivo jar em sua linha de comando para:

javac MyRtmpClient.java ByteBuffer.jar

Você não pode usar -cp com o Javac . Você tem que usar -classpath (assumindo que as outras configurações estejam corretas).