如何在程序集JAR中添加本地依赖关系



我有一个多模块Maven项目,它有几个依赖项。我想构建一个fat可执行JAR,其中包含它们以及我自己编译的类。我发现maven组装插件正是我所需要的,除了一个讨厌的问题。

我的一些依赖项是本地的,与项目源一起分布。我对它们使用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,但在几次尝试失败后,我仍然不知道如何做到这一点

我设法在这里找到了解决方案。这是在这个问题中描述的。

简而言之,整个问题在于system作用域的使用。事实证明,这种依赖关系在默认情况下是被过滤掉的,这是我在启用调试输出的情况下运行mvn package(-X/--debug)发现的。当为这些JAR定义本地存储库并与项目一起分发时,maven汇编插件会将它们解包为exected。

最新更新