我有一个包含多个依赖项的多模块Maven项目。我想构建一个包含它们的 fat </ em>可执行文件JAR以及我自己编译的类。我发现maven-assembly-plugin只是我需要的东西,除了一个令人讨厌的问题。
我的一些依赖项是本地的,并与项目源一起分发。我为它们使用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-assembly-plugin解决它。
以防我的插件配置如下:
<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,但经过多次尝试失败后,我仍然不知道该怎么做。
答案 0 :(得分:2)
我在这里找到了解决方案。它在this question中描述。
简而言之,整个问题是使用system
范围。事实证明,默认情况下会过滤掉这种依赖关系,我通过在启用调试输出(mvn package
)的情况下运行-X/--debug
来发现这种依赖关系。
当为这些JAR定义本地存储库,与项目一起分发时,它们将被maven-assembly-plugin解压缩。