2017-07-24 49 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