2010-04-06 18 views
15

Este es mi archivo de pom:experta en montaje-plugin no añade dependencias con el alcance del sistema

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.sia.g7</groupId> 
    <artifactId>sia</artifactId> 
    <packaging>jar</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <name>sia</name> 
    <url>http://maven.apache.org</url> 
    <dependencies> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.12</version> 
    </dependency> 
<dependency> 
    <groupId>commons-math</groupId> 
    <artifactId>commons-math</artifactId> 
    <version>1.2</version> 
</dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.8.1</version> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>jmathplot</groupId> 
     <artifactId>jmathplot</artifactId> 
     <version>1.0</version> 
     <scope>system</scope> 
     <systemPath>${project.basedir}/lib/jmathplot.jar</systemPath> 
    </dependency> 

    <dependency> 
     <groupId>jgraphx</groupId> 
     <artifactId>jgraphx</artifactId> 
     <version>1.0</version> 
     <scope>system</scope> 
     <systemPath>${project.basedir}/lib/jgraphx.jar</systemPath> 
    </dependency> 

    </dependencies> 
<build> 
    <plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>2.0.2</version> 
     <configuration> 
     <source>1.6</source> 
     <target>1.6</target> 
     </configuration> 
    </plugin> 
    <plugin> 
     <artifactId>maven-assembly-plugin</artifactId> 
     <configuration> 
     <descriptorRefs> 
      <descriptorRef>jar-with-dependencies</descriptorRef> 
     </descriptorRefs> 
     <appendAssemblyId>false</appendAssemblyId> 
     <archive> 
      <manifest> 
      <mainClass>com.sia.g7.AbstractSimulation</mainClass> 
      </manifest> 
     </archive> 
     </configuration> 

    </plugin> 
    </plugins> 

</build> 
</project> 

Y cuando corro el frasco me sale:

Exception in thread "main" java.lang.NoClassDefFoundError: com/mxgraph/swing/mxGraphComponent 

que forma parte de la jgraphx dependencia. ¿Qué me estoy perdiendo?

Respuesta

11

Sí, y esta es una de las razones por las que no debe abusar de system dependencias de alcance global (que es una mala práctica) y este problema ya se ha mencionado varias veces aquí en la SO (here, here). Estoy proponiendo una solución para tratar las dependencias relativas al proyecto de una manera "limpia" en this answer.

1

No debe ser el alcance del sistema en primer lugar. Esta es la fuente de tu problema. Instalar/implementar su dependencia en el repositorio y convertirla en una dependencia de ámbito de compilación (o tiempo de ejecución) normal.

2

Debe eliminar las cláusulas <scope>system</scope> de esas dependencias. Cuando el alcance está configurado en sistema, significa que el artefacto SIEMPRE está disponible, por lo que jar-with-dependence no lo incluye.

7

puede hacerlo mediante la adición de este dependencySet a su descriptor de archivo de ensamblaje

<dependencySet> 
    <outputDirectory>/</outputDirectory> 
    <unpack>true</unpack> 
    <scope>system</scope> 
</dependencySet> 

este descriptor ensamblaje añadir todas las dependencias, incluido el sistema con ámbito

<assembly 
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd"> 
<id>jar-with-all-dependencies</id> 
<formats> 
    <format>jar</format> 
</formats> 
<includeBaseDirectory>false</includeBaseDirectory> 
<dependencySets> 
    <dependencySet> 
     <outputDirectory>/</outputDirectory> 
     <useProjectArtifact>true</useProjectArtifact> 
     <unpack>true</unpack> 
     <scope>runtime</scope> 
    </dependencySet> 
    <dependencySet> 
     <outputDirectory>/</outputDirectory> 
     <unpack>true</unpack> 
     <scope>system</scope> 
    </dependencySet> 
</dependencySets> 

</assembly> 
-2

Desembale su frasco y añadirlo a src/main/recursos.

Cuestiones relacionadas