2017-08-31 50 views
1

我有了像的ClassNotFoundException在depdendent项目

<dependency> 
     <groupId>org.bouncycastle</groupId> 
     <artifactId>bcmail-jdk15on</artifactId> 
     <version>1.56</version> 
    </dependency> 
    <dependency> 
     <groupId>commons-codec</groupId> 
     <artifactId>commons-codec</artifactId> 
     <version>1.9</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.commons</groupId> 
     <artifactId>commons-collections4</artifactId> 
     <version>4.0</version> 
    </dependency> 

依赖关系,然后我的其他项目依赖于一个utils的项目utils的:

<dependency> 
     <groupId>com.mycomp.proj</groupId> 
     <artifactId>utils</artifactId> 
     <version>${utils.version}</version> 
    </dependency> 

这工作得很好没有问题。然后我说这个包utils的:第一

<dependency> 
     <groupId>net.sf.jopt-simple</groupId> 
     <artifactId>jopt-simple</artifactId> 
     <version>4.9</version> 
    </dependency> 

mvn clean install utils的,那么我的主要项目,并建立双方没有错误。但由于某些原因,当我尝试运行的主要项目,当它到达使用JOPT-简单的类,它与

ClassNotFoundException: joptsimple.OptionException 

任何想法,为什么我可以毫不JOPT,简单的运行我的主要项目精崩溃utils包,但一旦我将它添加为依赖失败?我已经手动删除了我的m2回购库中的utils包,并重新构建了它,看看是否修复了它,但没有修复它。

+2

如果您能够在没有依赖关系的情况下构建,那可能意味着类已经存在于类路径中。介绍该库可能会导致同一类的多个实现或覆盖相同的类。你可以分享你使用utils的项目的相关'mvn dependency:tree'。 – nullpointer

+0

下面添加的依赖关系将覆盖上面的依赖关系。如果你使用的是eclipse,那么你可以检查Effective pom。或者在重新依赖的依赖性检查中确实包含了哪一个。确保该jar没有在你的项目的任何构建路径 –

回答

-1

你可以试试以下事项你可以声明与系统的范围,它告诉Maven一个特定的JAR被认为是在类路径依赖

所以行家不会触及此依赖,并可以把手动在你的classpath中加入jar。

<dependency> 
    <groupId>net.sf.jopt-simple</groupId> 
    <artifactId>jopt-simple</artifactId> 
    <version>4.9</version> 
    <scope>system</scope> 
</dependency> 

另一种选择 - 如果你要管理这个jar文件你可以自己手动添加在类路径或本地回购,然后尝试在脱机模式下运行Maven。

mvn -o install 
+0

*在离线模式下运行maven *这将如何帮助? – nullpointer

+0

如果用户在本地repo/classpath中手动添加了jar,那么它不会从远程repo下载。所以外部依赖性将会消失。但是,如果您想下载外部依赖项,则无法在脱机模式下运行。 – nagendra547

+0

*用户已在本地回购/类路径中手动添加了jar *尽管对我来说似乎不是这样。 – nullpointer

相关问题