2010-08-04 16 views
14

Estoy utilizando el complemento maven-compile para compilar clases. Ahora me gustaría agregar un archivo jar al classpath actual. ese archivo se queda en otra ubicación (let dice c: /jars/abc.jar. Prefiero dejar este archivo aquí). Cómo puedo hacer eso. si uso ruta de clase en el argumento:Maven: agregue una carpeta o archivo jar al classpath actual

<configuration> 
<compilerArguments> 
    <classpath>c:/jars/abc.jar</classpath> 
</compilerArguments> 
</configuration> 

no va a trabajar, ya que anulará la ruta de clase actual (que incluye todas las dependencias)

por favor me ayude.

+0

¿Este frasco necesita estar exactamente en esa ubicación o solo necesita una forma de incluir frascos locales? – Gamlor

+2

Duplicado de [Maven, cómo agregar libs adicionales no disponibles en el repositorio] (http://stackoverflow.com/questions/2479046/maven-how-to-add-additional-libs-not-available-in-repo), [Maven. ¿Qué hacer con las jarras "sin hogar"?] (Http://stackoverflow.com/questions/2916949/maven-what-to-do-with-homeless-jars), [Las jarras locales no están incluidas en la ruta de la clase] (http : //stackoverflow.com/questions/3280834/local-jars-are-not-included-in-class-path/3281409#3281409) y muchos otros. –

+1

¿Encontró una forma de agregar dir? En lugar de agregar cada jar individual en classpath? – SJunejo

Respuesta

7

Esto podría haberse preguntado antes. Ver Can I add jars to maven 2 build classpath without installing them?

En pocas palabras: incluya su jar como dependencia con el alcance del sistema. Esto requiere especificar la ruta absoluta al contenedor.

Ver también http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html

+10

Me pregunto cuándo la gente dejará de sugerir abusar del alcance del 'sistema' Ver la [respuesta] de Brian (http://stackoverflow.com/questions/364114/can-i-add-jars-to-maven-2-build-classpath- sin-install-them/764684 # 764684) en la pregunta a la que se vinculó. Ver también [esta respuesta anterior] (http://stackoverflow.com/questions/3280834/local-jars-are-not-included-in-class-path/3281409#3281409). –

+1

una pregunta más. Si necesito agregar una carpeta (contiene muchos archivos .class) en classpath. Cómo puedo hacerlo. – David

+1

@Pascal Thivent - bueno, terminará cuando la gente deje de hacer tonterías como el bin.zip contenido en el proyecto org.bytedeco javacv-0.9 en maven central. Si hablas de comportamiento maven normal, bueno, como usuario no puedo arreglar la carga de maven .....tal vez debería quejarme en maven central. – user1050755

0

De docs y example no está claro que la manipulación ruta de clases no está permitido.

<configuration> 
<compilerArgs> 
    <arg>classpath=${basedir}/lib/bad.jar</arg> 
</compilerArgs> 
</configuration> 

Pero ver Java docs (también https://www.cis.upenn.edu/~bcpierce/courses/629/jdkdocs/tooldocs/solaris/javac.html)

ruta -classpath Especifica la ruta javac utilizará para buscar las clases necesarias para ejecutar javac o ser referenciada por otras clases que está compilación. Reemplaza la variable de entorno predeterminada o CLASSPATH si está configurada.

tal vez es posible conseguir ruta de clase actual y ampliarlo,
ver in maven, how output the classpath being used?

<properties> 
     <cpfile>cp.txt</cpfile> 
    </properties> 

    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <version>2.9</version> 
    <executions> 
     <execution> 
     <id>build-classpath</id> 
     <phase>generate-sources</phase> 
     <goals> 
      <goal>build-classpath</goal> 
     </goals> 
     <configuration> 
      <outputFile>${cpfile}</outputFile> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 

de archivos de lectura (Read a file into a Maven property)

<plugin> 
    <groupId>org.codehaus.gmaven</groupId> 
    <artifactId>gmaven-plugin</artifactId> 
    <version>1.4</version> 
    <executions> 
    <execution> 
     <phase>generate-resources</phase> 
     <goals> 
     <goal>execute</goal> 
     </goals> 
     <configuration> 
     <source> 
      def file = new File(project.properties.cpfile) 
      project.properties.cp = file.getText() 
     </source> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

y finalmente

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>3.6.1</version> 
    <configuration> 
     <compilerArgs> 
     <arg>classpath=${cp}:${basedir}/lib/bad.jar</arg> 
     </compilerArgs> 
    </configuration> 
    </plugin> 
Cuestiones relacionadas