首页 > 解决方案 > 从 Bash 脚本调用 Maven 工件,传递任意参数?

问题描述

目的是拥有一个 Bash 脚本,该脚本从使用 Maven 构建的项目中运行 Java 程序,理想情况下,其类路径使用 Maven 缓存所需的所有 JAR。

我可以为此想到两种解决方案,但它们都有些难看或无法处理某些问题:

1)使用exec:java插件/目标。我无法解决的问题是无法使用此解决方案从命令行向程序传递任意参数:传递参数的唯一方法是设置mvn命令行参数的值。因此,如果有多个参数,则需要引用该值。但是,如果传递给程序的参数需要引用并且例如选项值可以包含空格,那么似乎没有办法做到这一点。

2)使用依赖插件创建一个包含使用build-classpath目标的类路径的文件。生成一个包含项目所依赖的 Maven 缓存中所有 JAR 位置的文件非常棒。但是,似乎不可能将项目工件 JAR 的位置也添加到该文件中。因此,该文件中的内容需要以某种方式与项目 JAR 的位置相结合:

2.1) 使用mvn package和使用目录中的JAR target。这很难看,因为理想情况下我们还想使用 Maven 缓存中的 JAR,比如依赖项

2.2) 有另一个虚拟 Maven 项目,该项目取决于我要运行的项目并在build-classpath那里使用目标。然后,这将为我提供完整的类路径,但代价是需要拥有另一个项目并在该项目中运行必要的目标。如果项目位于原始项目的子目录中,我也看不出如何将这个假项目构建为主项目的一部分,除了可能使用exec:exec插件/目标,这很丑陋。

有什么我遗漏的或推荐的如何以更直接的方式做到这一点的方法吗?

更新:在评论中有人问我为什么要首先使用 Maven 缓存。原因是在这种情况下,我们知道所需的一切都已经在 maven 缓存中,我们谈论的是相当大的依赖链,使用不同的机制和不同的缓存会感觉非常尴尬和笨拙,只是为了使这项工作。很难理解为什么 Maven 没有立即为此提供更简单的解决方案。

标签: mavenmaven-dependency-pluginmaven-exec-plugin

解决方案


推荐阅读