2017-08-23 112 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> 
相关问题