我需要能够允许我的maven包在两种情况下执行。
用户需要从命令行执行jar,以便在用户执行java -jar myjar.jar
当客户端项目将myjar作为依赖项引用时,myjar还需要下载所有传递依赖项(以"普通" maven方式)。
场景1要求打包AWT表格jar,以便弹出AWT对话框 场景2要求在客户端项目构建时下载所有其他依赖项。
如何打包以保持尽可能小?
我已经独立尝试了jar-plugin,shade-plugin和assembly-plugin而没有太多运气。
JAR-插件:
将forms-1.2.1.jar放在lib /目录中并将其添加到类路径中是行不通的,因为java -jar myjar.jar不会在命令行加载它
SHADE-插件:
下载互联网。如何排除某些依赖项?
ASSEMBLY-插件:
下载互联网。如何排除某些依赖项?
是否有办法打包forms-1.2.1.jar的传递依赖项(针对方案1),但在打包时排除所有其他依赖项,以便在客户端项目构建时下载(针对方案2)。
jar-plugin或assembly-plugin可以这样做吗?
答案 0 :(得分:0)
<project>
[...]
<build>
[...]
<plugins>
<plugin>
<!-- NOTE: We don't need a groupId specification because the group is
org.apache.maven.plugins ...which is assumed by default.
-->
<artifactId>maven-assembly-plugin</artifactId>
<version>2.5.2</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
[...]
</project>
这将生成一个包含所有依赖项的jar文件,并且可以从命令行调用它,但为了使其正常工作,您需要一个补充部分:
<project>
[...]
<build>
[...]
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.5.2</version>
<configuration>
[...]
<archive>
<manifest>
<mainClass>org.sample.App</mainClass>
</manifest>
</archive>
</configuration>
[...]
</plugin>
[...]
</project>