2017-08-23 113 views
1

我想基於Maven構建我的應用程序的jar文件。所以我需要不包含外部jar庫到我的版本。我需要我的應用程序在運行時從本地Maven存儲庫或本地文件夾提供此外部依賴項,那些應用程序將包含這些外部庫。 配置我的POM文件的這種依賴關係是這樣的:如何用外部jar庫建立一個maven可執行jar文件?

<profiles> 
     <profile> 
      <id>compile</id> 
      <dependencies> 
       <dependency> 
        <groupId>groupId</groupId> 
        <artifactId>some.artifact</artifactId> 
        <version>1.0</version> 
       </dependency> 
      </dependencies> 
     </profile> 

,並試圖以這個前綴-Pcompile運行這個罐子。我正在使用這個answer

但是在運行時,當我試圖執行一個方法時,使用這個外部庫,我從我的外部庫中得到了java.lang.NoClassDefFoundError和我的類的名字。

那麼我如何構建一個使用本地存儲的外部jar庫?

+0

喜歡這裏:https://stackoverflow.com/questions/11758594/how-do-i-put-all-required-jar-files-in-a -library-folder-inside-the-final-jar-fil – PeterMmm

+0

構建一個包含所有依賴關係的獨立可執行jar文件比較常見。使部署變得更加簡單和安全。 https://stackoverflow.com/questions/574594/how-can-i-create-an-executable-jar-with-dependencies-using-maven?rq=1 – Thilo

+0

@Thilo:如果你有一個庫,這是行不通的像Bouncycastle在依賴關係中,因爲它是一個簽名的加密提供者,而jar依賴關係會殺死jar簽名,從而導致BC失敗。 – Robert

回答

0

所以我找到了解決方案來存儲最終maven構建之外的jar。 我只是需要將此jar添加到具有正確路徑的類路徑中。爲此,我加入這pom.xml的:

<plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <version>3.0.2</version> 
       <configuration> 
        <archive> 
         <manifest> 
         <addClasspath>true</addClasspath> 
         <classpathPrefix>${project.build.finalName}.lib/</classpathPrefix> 
         <mainClass>your.mainClass</mainClass> 
         </manifest> 
         <manifestEntries> 
          <Class-Path>project-0.0.1-SNAPSHOT.lib/some.lib-1.1.jar</Class-Path> 
         </manifestEntries> 

        </archive> 
       </configuration>    
</plugin> 
相關問題