2011-03-12 11 views
14

que tienen un proyecto que utiliza "sistema" para especificar el alcance de un archivo JAR incluido en WEB-INF/lib dir de mi proyecto. Este artefacto no está en ninguno de los repositorios de maven, así que debo incluirlo como parte de mi proyecto. Lo hago con lo siguiente:Maven exec plugin- ¿cómo incluir classpath "sistema"?

<dependency> 
     <groupId>com.example</groupId> 
     <artifactId>MySpecialLib</artifactId> 
     <version>1.2</version> 
     <scope>system</scope> 
     <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/MySpecialLib-1.2.jar</systemPath> 
    </dependency> 

Esto ha funcionado muy bien para la mayoría de las cosas.

pero ahora estoy tratando de ejecutar un código en la línea de comandos (fuera de mi aplicación web, a través de un método main() He añadido) y mvn exec:java no puede resolver el código en MySpecialLib porque no está incluido en el "tiempo de ejecución" classpath.

¿Cómo puedo ya sea:

  • complemento MySpecialLib a la ruta de clase en tiempo de ejecución

o

  • decir mvn exec:java utilizar también la ruta de clase system?

He intentado mvn exec:java -Dexec.classpathScope=system, pero eso deja fuera todo lo que está en runtime.

Respuesta

1

interesante saber que classpathScope=system gotas runtime dependencias. Descubrí que al incluirlo como plugin en el pom.xml funciona como una alternativa. ¿Podrías por favor decirme si también funciona para ti?

por lo que añade un nivel de sistema de dependencia a commons-colección como un ejemplo como que tiene para su artefacto: -

<dependency> 
     <groupId>commons-collections</groupId> 
     <artifactId>commons-collections</artifactId> 
     <version>3.0</version> 
     <scope>system</scope> 
     <systemPath>C:\\<some_path>\\commons-collections-3.0.jar</systemPath> 
    </dependency> 

Luego, en la etiqueta <build> he el plugin exec-maven-plugin para ser ejecutado en la fase install : -

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>exec-maven-plugin</artifactId> 
    <version>1.1</version> 
    <executions> 
    <execution> 
    <phase>install</phase> 
    <goals> 
     <goal>java</goal> 
    </goals> 
    <configuration> 
     <mainClass>com.stackoverflow.test.App</mainClass> 
    </configuration> 
    </execution> 
    </executions> 
    </plugin> 

Entonces me encontré con mvn install. También me aseguré de que la clase com.stackoverflow.test.App tenga algún código que invoque una clase del commons-collections-3.0.

Espero que esto ayude.

0

La respuesta correcta es utilizar el experto a instalar-plugin y poner el recipiente y ponerlo en tu repositorio local. O, mejor aún, ejecute nexus o artifactory y use el complemento deploy para colocar el jar allí. System classpath es solo un mundo de dolor.

+2

El problema con añadirla a tu repositorio local es que está fuera de la vista y de la mente - Es fácil olvidar que es algo personalizado que has agregado a tu construcción y que es fácil de perder. También otros desarrolladores en su equipo deben ser instruidos para hacer la misma instalación manual. Nexus es un martillo gigante de una solución para lo que debería ser un problema simple: agregar un artefacto personalizado a tu construcción. Sin embargo, estoy de acuerdo contigo en el mundo del dolor. :-) –

+0

He escrito makefiles que script instalar en el repositorio local para que sea inolvidable. Además, nexus gratuito es un pequeño martillo que proporciona una gran cantidad de características útiles, en mi opinión. – bmargulies

13

Uso 'compilar' alcance para ejecutar Maven plugin de ejecución - mvn exec:java -Dexec.classpathScope=compile. Esto incluirá dependencias con ámbito de sistema.

0

como, por ejemplo señaló, la solución es utilizar el compilar alcance cuando se ejecuta exec.

En cada invocación:

mvn exec:java -Dexec.classpathScope=compile 

o directamente en el exec-plugin-configuración:

 <plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>exec-maven-plugin</artifactId> 
     ... 
     <configuration> 
       <classpathScope>compile</classpathScope> 
     </configuration> 
    </plugin> 
Cuestiones relacionadas