2012-05-25 25 views
0

我注意到一个奇怪的问题。我能够使用Junit运行我的测试用例,但是当我使用maven运行时,其中一个测试用例失败。抱怨Gson class def没有找到。java.lang.NoClassDefFoundError:com/google/gson/Gson

我能看到GSON罐子在Maven依赖。

所以我怀疑classpath是不包括Gson的。所以我用-X运行maven并注意到一些线索。

[DEBUG] Could not find metadata com.example.libraries:Symbology:1.0.0-SNAPSHOT/maven-metadata.xml in local (C:\Users\ra\.m2\repository) 
[DEBUG] Skipped remote update check for com.example.libraries:Symbology:1.0.0-SNAPSHOT/maven-metadata.xml, locally cached metadata up-to-date. 
[DEBUG] Could not find metadata com.example.libraries:Symbology:1.0.0-SNAPSHOT/maven-metadata.xml in local (C:\Users\ra\.m2\repository) 
[DEBUG] Skipped remote update check for com.example.libraries:Symbology:1.0.0-SNAPSHOT/maven-metadata.xml, locally cached metadata up-to-date. 
[WARNING] The POM for com.example.libraries:Symbology:jar:1.0.0-SNAPSHOT is invalid, transitive dependencies (if any) will not be available: 2 problems were encountered while building the effective model for com.example.libraries:Symbology:1.0.0-SNAPSHOT 
[ERROR] 'dependencies.dependency.artifactId' for ::jar is missing. @ 
[ERROR] 'dependencies.dependency.groupId' for ::jar is missing. @ 

我有一个项目,这取决于Symbology项目,这反过来使用Gson。 但是现在从这个日志中我看到传递依赖并没有包含在内。所以Gson类没有被发现。

这里是符号POM:

<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/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 

<groupId>com.example.libraries</groupId> 
<artifactId>Symbology</artifactId> 
<version>1.0.0-SNAPSHOT</version> 
<packaging>jar</packaging> 

<name>Symbology</name> 
<url>http://maven.apache.org</url> 

<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
</properties> 

<dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.10</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>com.google.code.gson</groupId> 
     <artifactId>gson</artifactId> 
     <version>2.1</version> 
    </dependency> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.16</version> 
    </dependency> 
</dependencies> 

这里是我的项目中的哪一个调用符号的双响炮:

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 

<groupId>com.example.libraries</groupId> 
<artifactId>FGF</artifactId> 
<version>1.0.0-SNAPSHOT</version> 
<packaging>jar</packaging> 
<distributionManagement> 
    <snapshotRepository> 
     <id>example.com</id> 
     <name>example.com-snapshots</name> 
     <url>http://example/artifactory/libs-snapshots-local</url> 
    </snapshotRepository> 
</distributionManagement> 

<name>FGF</name> 
<url>http://maven.apache.org</url> 

<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
</properties> 

<dependencies> 

    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.10</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.16</version> 
    </dependency> 
    <dependency> 
     <groupId>com.example.libraries</groupId> 
     <artifactId>Category</artifactId> 
     <version>1.0.0-SNAPSHOT</version> 
    </dependency> 
    <dependency> 
     <groupId>com.example.libraries</groupId> 
     <artifactId>Time</artifactId> 
     <version>1.0.0-SNAPSHOT</version> 
    </dependency> 
    <dependency> 
     <groupId>com.example.libraries</groupId> 
     <artifactId>Display</artifactId> 
     <version>1.0.0-SNAPSHOT</version> 
    </dependency> 
    **<dependency> 
     <groupId>com.example.libraries</groupId> 
     <artifactId>Symbology</artifactId> 
     <version>1.0.0-SNAPSHOT</version> 
    </dependency>** 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>3.2.0.BUILD-SNAPSHOT</version> 
    </dependency> 
    <dependency> 
     <groupId>cglib</groupId> 
     <artifactId>cglib</artifactId> 
     <version>2.2.2</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.directory.studio</groupId> 
     <artifactId>org.apache.commons.lang</artifactId> 
     <version>2.6</version> 
    </dependency>  

</dependencies> 

+1

没有尝试指定与的GSON依赖编译? – sfat

+1

这些星号是故意写的吗? – Luciano

+0

是的。它们并不存在于原来的POM – javaMan

回答

1

想通了最后后的整合问题花费很多时间。

的问题是,当我推符号神器资料库,能够不推POM到库中。因此,当我使用符号学工件作为依赖项时,我的项目无法知道传递依赖项是什么。

所以我把我的聚甲醛到存储库罐子一起,现在是能够得到所有的依赖。

HURRAYYYYYYYYYYYYYYYYY !!!!!!!!!!!!!!!!!!