gpt4 book ai didi

java - 如何在 Maven Artifact 中运行 Java 类,自动解析依赖关系?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:01:52 25 4
gpt4 key购买 nike

如果我知道一个 Artifact 的坐标,以及该 Artifact 中类的名称,我可以让 Maven 运行这个类,包括它在 Java 类路径上的所有依赖项吗?

例如,假设一位同事告诉我一个我可以运行的工具,它发布到我们的内部 Nexus, Artifact 坐标为 example:cool-tools:1.0.0。我用了this answer下载 Artifact 。现在,我知道主类名称是 example.Main。但是,如果我只是转到 Artifact 的下载位置并运行 java -cp cool-tools-1.0.0.jar example.Main,我会得到 NoClassDefFoundError 的任何依赖项酷工具

我知道 maven-exec-plugin,但据我所知,它仅适用于您拥有源代码的项目。假设我无权访问源代码,只能访问包含该工具(及其所有依赖项)的 Nexus。理想情况下,我会做类似 mvn exec:exec -DmainArtifact='example:cool-tools:1.0.0' -DmainClass='example.Main' 的操作,但我不认为 exec插件实际上可以做到这一点。

预计到达时间:需要说明的是,我没有本地项目/POM。如果可能,我想使用命令行来完成此操作,而不编写 POM。

最佳答案

您的任务没有开箱即用的解决方案。但是您可以创建一个简单的脚本来解决它:

  • 从存储库下载您的工具的 pom.xml。
  • 下载您的工具的 jar。
  • 下载它的所有依赖项。
  • 针对已解析的库运行 java。

命令行:

> mvn dependency:copy -Dartifact=<tool.group.id>:<tool.artifact.id>:<tool.version>:pom -DoutputDirectory=target
> mvn dependency:copy -Dartifact=<tool.group.id>:<tool.artifact.id>:<tool.version> -DoutputDirectory=target
> mvn dependency:copy-dependencies -f target/<tool.artifact.id>-<tool.version>.pom -DoutputDirectory=target
> java -cp target/* <tool.main.class>

目录 ./target 将包含您的工具和所有依赖项。

查看详情 dependency:copydependency:copy-dependencies魔力。

编辑

作为替代方案,您可以通过以下方式使用本地存储库中的库构建类路径:

> mvn dependency:build-classpath -DincludeScope=runtime -f target/<tool.artifact.id>-<tool.version>.pom [-Dmdep.outputFile=/full/path/to/file]

查看详情 build-classpath魔力。

关于java - 如何在 Maven Artifact 中运行 Java 类,自动解析依赖关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24555692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com