我正在尝试编写一个将 maven pom.xml 文件作为输入并执行以下操作的 java 程序:
- 下载所有依赖项
- 将 jars 添加到类路径
- 执行 java 代码(从 jar 中加载)
是否可以?任何实现上述#1的示例代码将不胜感激
您的要求正是Maven Exec 插件已经完成的。
如果您绝对必须在 Java 应用程序中执行此操作:
Maven 用于进行依赖解析的库称为 Aether。如果您查看 Sonatype 站点上的文档,这里有一个如何执行步骤 1 的示例。依赖项解析过程的一部分将使您能够访问依赖项列表,然后您可以循环访问以构建您的类路径。
对于第 3 步,您可以使用 ProcessBuilder 并将目标 Java 应用程序作为使用 Aether 构建类路径的 JVM 的子进程启动。
如果可以使用 shell 脚本:
您可以使用mvn dependency:get -Dartifact=[group]:[artifact]:[version]
将工件下载到本地存储库。
然后您可以使用mvn dependency:build-classpath
来生成类路径字符串。
然后,您可以使用 -cp 选项简单地执行 java。您还必须知道您想要的主类是什么,或者您可以根据工件和版本号计算主 jar 的名称并将其传递给 -jar。
如果您能够在部署环境中获取主项目的 pom.xml:
你可以只使用mvn exec:java -DmainClass=com.company.package.YourMainClass
. 这个选项是迄今为止最简单的,但它确实有在 maven JVM 中执行的缺点,而且据我所知,没有分叉单独进程的选项。此外,您需要有一个完整的 pom 来完成这项工作,这并不总是很方便。