2017-07-24 58 views
2

我正在创建一个具有依赖关系的罐子。这是我的POM中的相关部分超级罐子中的java.lang.NoClassDefFoundError

<build> 
    <resources> 
     <resource> 
      <directory>src/main/resources</directory> 
      <filtering>true</filtering> 
     </resource> 
     <resource> 
      <directory>${project.basedir}</directory> 
      <includes> 
       <include>lib/*.jar</include> 
      </includes> 
     </resource> 
    </resources> 
    <plugins> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.5.1</version> 
      <configuration> 
       <source>1.8</source> 
       <target>1.8</target> 
      </configuration> 
     </plugin> 

     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>2.2</version> 
      <configuration> 
       <descriptorRefs> 
        <descriptorRef>jar-with-dependencies</descriptorRef> 
       </descriptorRefs> 
       <archive> 
        <manifest> 
         <mainClass>path.to.main.Main</mainClass> 
        </manifest> 
        <manifestEntries> 
         <Class-Path>.</Class-Path> 
        </manifestEntries> 
       </archive> 
      </configuration> 
      <executions> 
       <execution> 
        <id>make-assembly</id> 
        <phase>package</phase> 
        <goals> 
         <goal>single</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

我可以使用mvn clean install来构建罐子。但是当我运行它

java -jar myProject-0.0.1-SNAPSHOT-jar-with-dependencies.jar,我得到一个java.lang.NoClassDefFoundError在一个类来自lib文件夹中的jar。

注意,我必须包括这瓶由

 <resource> 
      <directory>${project.basedir}</directory> 
      <includes> 
       <include>lib/*.jar</include> 
      </includes> 
     </resource> 

那么,为什么我收到错误?我究竟做错了什么?另外,当我解压缩的jar,我看到lib文件夹和内的jar。那么为什么不能找到myProject-0.0.1-SNAPSHOT-jar-with-dependencies.jar

更新

我加入

  <plugin> 
       <artifactId>maven-dependency-plugin</artifactId> 
       <executions> 
        <execution> 
         <phase>install</phase> 
         <goals> 
          <goal>copy-dependencies</goal> 
         </goals> 
         <configuration> 
          <outputDirectory>${project.build.directory}/lib</outputDirectory> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 

mvn clean install我看到这个控制台

[INFO]复制my3rdParty.jar到路径/到/项目/目标/ lib目录上/biomedical-my3rdParty-0.0.1.jar

+1

假设它位于jar的根文件夹中,lib文件夹不是类路径的一部分。 – f1sh

+0

但是当我爆炸的罐子,我可以看到lib文件夹 – AbtPst

+0

加上我有''这不应该包含根路径下的所有内容作为类路径吗? – AbtPst

回答

1

检查您构建的JAR中的包含物。通常情况下,如果您的类路径中包含此类的副本(在您的胖JAR中),就会遇到此问题。看看有问题的课程是否包含双重课程。要么是上面的用户说的(它在构建的JAR中没有正确构建)。

+0

谢谢但是当我爆炸的罐子,我可以看到lib文件夹 – AbtPst

+0

加我有'' – AbtPst

+0

这不应该包含根路径下的所有内容作为类路径吗? – AbtPst