2010-04-06 4 views
15

Это мой П файл:Maven сборка-плагин не добавляет зависимостей с размахом системы

<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> 

И когда я бегом баночки я получаю:

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

, который является частью jgraphx зависимость. Что мне не хватает?

ответ

11

Да, и это одна из причин, почему вы не должны злоупотреблять system зависимости Scope (что является глобально плохая практика), и эта проблема уже несколько раз упоминали здесь на SO (here, here). Я предлагаю решение для решения относительных зависимостей проекта «чистым» способом в this answer.

1

В первую очередь это не должно быть системное пространство. Это источник вашей проблемы. Установите/разверните свою зависимость в репозитории и сделайте ее нормальной скомпилированной (или временной) средой.

2

Вы должны удалить пункты <scope>system</scope> из этих зависимостей. Когда область задана в системе, это означает, что артефакт ВСЕГДА доступен, поэтому jar-with-dependances его не включают.

7

вы можете сделать это, добавив этот dependencySet к вашему сборки дескриптора файла

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

этот узел Дескриптор добавить все зависимости, включая систему областью действия

<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

Распаковка банку и добавить его в SRC/магистральный /Ресурсы.