【问题标题】:Download maven dependencies programmatically以编程方式下载 Maven 依赖项
【发布时间】:2019-05-01 15:43:27
【问题描述】:

我一直在尝试通过 aether 以编程方式下载所有 maven 依赖项。我可以得到所有的传递依赖(代码来自

https://github.com/apache/maven-resolver/blob/master/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/ResolveTransitiveDependencies.java

但是因为它不下载依赖项所需的任何插件。

由于我对 Maven 很陌生,我可能在这里遗漏了一些非常明显的东西,但我们将不胜感激。

如果我尝试使用 ResolveTransitiveDependencies.java 下载 sonarqube 插件的依赖项,我会正确下载以下内容。

org\sonarsource\scanner\maven\sonar-maven-plugin\3.6.0.1398\sonar-maven-plugin-3.6.0.1398.jar
org\sonatype\plexus\plexus-sec-dispatcher\1.4\plexus-sec-dispatcher-1.4.jar
org\sonatype\plexus\plexus-cipher\1.4\plexus-cipher-1.4.jar
org\codehaus\plexus\plexus-utils\3.0.22\plexus-utils-3.0.22.jar
org\sonarsource\scanner\api\sonar-scanner-api\2.12.0.1661\sonar-scanner-api-2.12.0.1661.jar
commons-lang\commons-lang\2.6\commons-lang-2.6.jar

但是,它不会下载任何属于单个传递依赖 POM 的插件。有没有办法从 Aether 做到这一点?

【问题讨论】:

  • 为什么要以编程方式下载它们而不是让 Maven 完成它的工作?这样做的目的是什么?你想解决什么样的问题?
  • 只做一个 mvn 编译有什么问题吗?
  • @khmarbaise - 由于团队正在研究气隙网络,因此最好在需要时在 maven 环境之外下载依赖项。由于dependency:go-offline 需要一个 Maven 项目,因此我们的想法是拥有一个具有所需依赖项的 JSON 文件,然后使用 Maven 之外的程序下载它 - 如果这有意义吗??
  • 最简单的解决方案是使用存储库管理器构建您的应用程序并将该状态复制到内部网络中..轻松减少工作...创建具有依赖关系的补充文件不是一个好主意,因为它会复制信息已经在 pom 文件中了...
  • @khmarbaise - 不确定我是否完全理解。问题是该应用程序无法在外部网络上构建。 POM 可以复制,所以想法是使用 pom 下载所有直接和插件依赖项,然后将其复制到内部网络存储库管理器,然后可用于构建应用程序。

标签: java maven maven-3 aether


【解决方案1】:

您可以尝试 Jeka 库 (https://jeka.dev) 来完成此操作。

import dev.jeka.core.api.depmanagement.*;

import java.nio.file.Path;
import java.util.List;

import static dev.jeka.core.api.depmanagement.JkJavaDepScopes.*;

public class SampleDepDownload {

    public static void main(String[] args) {
        JkDependencySet deps = JkDependencySet.of()
                .and("com.googlecode.playn:playn-core:1.4")
                .and("com.threerings:tripleplay:1.4")
                .withDefaultScopes(COMPILE_AND_RUNTIME);
        JkDependencyResolver resolver = JkDependencyResolver.of(JkRepo.ofMavenCentral());
        List<Path> libs = resolver.resolve(deps, RUNTIME).getFiles().getEntries();
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-24
    • 1970-01-01
    • 2016-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-22
    • 2020-07-06
    相关资源
    最近更新 更多