目标是拥有一个Bash脚本,该脚本从Maven构建的项目中运行Java程序,理想情况下,该类具有使用Maven缓存中所需的所有JAR的类路径。
我可以想到两种解决方案,但它们都很难看或无法处理某些问题:
1)使用exec:java
插件/目标。我无法解决的问题是,无法使用此解决方案从命令行将任意参数传递给程序:传递参数的唯一方法是设置mvn
命令行参数的值。因此,如果有多个参数,则需要引用该值。但是,如果要传递给程序的参数需要用引号引起来,例如选项值可以包含空格,似乎没有办法做到这一点。
2)使用依赖性插件使用build-classpath
目标创建一个包含类路径的文件。生成包含该项目所依赖的Maven缓存中所有JAR位置的文件非常有用。但是,似乎也无法将项目工件JAR的位置也添加到该文件中。因此,该文件中的内容需要以某种方式与项目JAR的位置合并:
2.1)使用mvn package
并在target
目录中使用JAR。这很丑陋,因为理想情况下,我们还希望使用Maven缓存中的JAR,例如用于依赖项
2.2)还有另一个虚拟Maven项目,该项目取决于我要运行的项目并在那里使用build-classpath
目标。然后,这将给我完整的类路径,但是以需要有另一个项目并在该项目中运行必要的目标为代价。如果该项目位于原始项目的子目录中,那么除了使用exec:exec
插件/目标(很难看)之外,我还看不到如何将该伪造的项目作为主项目的一部分构建的好方法。 / p>
我有什么想念的,还是推荐的更直接的方式?
更新:我在评论中被问到为什么我首先要使用Maven缓存。原因是在这种情况下,我们知道所需的一切都已经存在于Maven缓存中,我们正在谈论相当大的依赖链,使用不同的机制和不同的缓存来感觉很尴尬和笨拙,只是为了使这项工作。很难理解为什么Maven不能立即提供更简单的解决方案。