2013-12-22 62 views
2

我有一个具有多个依赖项的多模块Maven项目。我想构建一个包含它们的可执行JAR以及我自己编译的类。我发现maven-assembly-plugin正是我所需要的,除了一个令人讨厌的问题。如何在程序集中添加本地依赖项JAR

我的一些依赖项是本地的,并与项目源分布。我为他们使用system范围。它看起来是这样的:

<dependency> 
    <groupId>com.intellij</groupId> 
    <artifactId>forms_rt</artifactId> 
    <version>1</version> 
    <scope>system</scope> 
    <systemPath>${project.basedir}/lib/forms_rt.jar</systemPath> 
</dependency> 

的问题是,由于某种原因,这些库不是包装并在结果JAR依赖其余捆绑。

我知道的system范围的使用被认为是不好的做法,事实上,我甚至可以找到他们的一些(虽然较为陈旧)在Maven仓库,但无论如何,它让我为难,如何将其与maven-得到解决组装插件。

万一我的插件配置是这样的:

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <configuration> 
     <archive> 
      <manifest> 
       <mainClass>repoll.server.Repoll</mainClass> 
      </manifest> 
     </archive> 
     <finalName>${project.build.finalName}-full</finalName> 
     <appendAssemblyId>false</appendAssemblyId> 
     <descriptorRefs> 
      <descriptorRef>jar-with-dependencies</descriptorRef> 
     </descriptorRefs> 
    </configuration> 
    <executions> 
     <execution> 
      <id>make-assembly</id> 
      <phase>package</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

当我明白我必须编写自定义的描述符,它如包括并解开${project.basedir}/lib目录中的所有JAR,但在多次尝试失败后,我仍然不知道如何操作。

回答

2

我已经设法在这里找到解决方案。这在this question中有描述。

总之,整个问题是在使用system范围。事实证明,这种依赖关系被默认过滤掉了,我通过运行mvn package并且启用了调试输出(-X/--debug)发现了这种依赖关系。 当本地存储库为这些JAR定义,与项目一起分发时,它们在执行时通过maven-assembly-plugin解压缩。

相关问题