问题标签 [aether]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
5435 浏览

java - 如何以编程方式使用 maven 下载 jar

我正在编写一个应用程序,该应用程序需要我下载一个 jar 给定的 maven groupid/artifactid/version。

我目前从

所以给定了 POM 的 url,我现在有了代表它的 maven 模型对象。这似乎运作良好。

我想知道的是两件事:

  1. 在 maven 插件将使用的 maven 存储库中找到模型表示的 jar 工件的 url
  2. 给定模型,在本地存储库中找到代表 jar 的文件

我已经有了质量较差的解决方案:我去 mvnrepository.com 手动编码 url,并使用 ~/.m2/repository 作为文件的前缀。我显然可以改进这个解决方案,但我最终会很差地复制经过良好测试并在 maven 代码库中使用良好的代码。

我真的很想知道如何使用 Maven 类来做到这一点。

我已经做了一些谷歌搜索,但是关于 maven 和 jars(甚至在 stackoverflow 上)的任何搜索的有趣之处在于,我找到了很多关于如何使用 maven 的解决方案,而不是如何使用 maven 类进行编码。

谢谢您的帮助

0 投票
1 回答
807 浏览

maven - 使用 Maven 和可能的 Aether 解决复杂的依赖关系 - 如何?

我正在尝试编写一个 Maven 插件,它执行以下操作:获取模块的所有依赖项并找出它的任何传递依赖项是否对当前模块的任何兄弟模块具有传递依赖项。

我的想法如下:

  • 获取模块的父级(仅 POM 父级),然后获取其所有模块,以查找当前模块的兄弟姐妹。
  • 获取模块的传递依赖项(但仅限于我们的组 ID)。
  • 对于每个传递依赖,获取它的传递依赖并找出它们中的任何一个是否是兄弟模块之一。

我试过用 Maven 2 风格做,现在以 Aether 结束。但是,我不确定是否可以用 Aether 做我想做的事情。

目前,我可以获得仅 POM 的父级(不是使用 Aether,而是使用 MavenProject),我可以获得传递依赖项,然后过滤它们以仅保留具有我们组 ID 的工件。我没有在 Aether 中找到相当于 Maven FilterArtifacts 的东西。

所以,问题是:我关于如何实现目标的想法是否正确?我可以只用Aether吗?如果是,我该怎么做?还是我必须使用 Maven 2 和 Aether 的组合?(我试了一下,但是SNAPSHOT版和时间戳SNAPSHOT版的区别有点繁琐)

无论如何,非常感谢任何帮助!

0 投票
3 回答
7388 浏览

java - Retrieving Maven Artifact from Repository using Maven Java API

If I have a Maven Artifact information (GroupId, ArtifactId, Version) how can I programmatically (using Java) retrieve that Artifact from my local repository?

Specifically, I need to be able to connect to the Maven Repository and create/retrieve a org.apache.maven.artifact.Artifact so I can retrieve the file associated with the Artifact.

I have looked into m2e source code, but the MavenImpl.java (which provides Artifact resolution) is way more complex than what I need and it is difficult to understand how the connection to the repository works.

0 投票
6 回答
18415 浏览

java - 以编程方式解决插件外部的 Maven 依赖项 - 获取 RepositorySystemSession 和 RepositorySystem

也许这将是一项比我最初想象的更大的任务,但无论如何,我正在尝试MavenProject从文件中加载一个,然后解决它的依赖关系。我有这两个位的代码,但是我缺少一些我需要的对象引用;具体来说,我需要获取 RepositorySystemSessionand的实例RepositorySystem。有小费吗?

注意:我已经用标记了这个问题,但这不是 Maven 插件。我很高兴授权 Maven 3(我想我已经拥有了..)

这是我到目前为止的代码:

构造MavenProject

解决依赖关系:

我意识到这可能是一个不寻常的请求,也许我应该放弃我正在尝试做的事情并将其包装为插件......但我只是想完成我现在开始的事情!提前致谢。

0 投票
1 回答
643 浏览

maven - 如何在 org.apache.maven.AbstractMavenLifecycleParticipant 中使用 Aether

我按照这个示例将所需的依赖项注入到我的 AbtractMavenLifecyleParticipant 中:

'afterProjectsRead' 被完美地调用,但 repoSystem、repoSession 和 remoteRepos 总是'null'。

如何从 AbstractMavenLifecyleParticipant 中获取这些对象?

0 投票
2 回答
652 浏览

maven - 在运行时动态加载 Maven 工件

在运行时,我的应用程序想要动态添加功能。我们希望能够从 Maven 存储库下载工件,将它们添加到类路径中,并在不重新启动应用服务器的情况下使用它们。可能的?

我遇到过 Eclipse Aether,它提供对 Maven 存储库的编程访问。现在缺少的部分是动态类路径。

0 投票
2 回答
3077 浏览

maven - 如何以编程方式列出所有传递依赖项,包括使用 DependencyGraphBuilder 在 Maven 中覆盖的依赖项?

这类似于其他问题(如this),但我希望能够使用最新的API 来做到这一点。maven-dependency-plugin:tree 详细选项已被弃用,并且在最新的 (2.5.1) 代码中没有任何作用,因此没有很好的示例说明如何做到这一点。

0 投票
1 回答
2368 浏览

maven - 在 maven-plugin-testing-harness 中注入 DefaultRepositorySystem 时出错

我正在尝试基于现有 (2.0) 插件创建一个新的 maven (3.0.3) 插件,并促进 aether 拾取一些依赖项。

我尝试使用 maven-plugin-testing-harness(版本 2.0.1)创建一个简单的测试来加载 mojo,但是 lookupMojo 失败并出现 guice 异常:

这当然是因为我需要在某个时候引用存储库系统,但不是现在:

我已经尝试过(实际上是从 2.1 版开始),但在 AbstractMojoTestCase#setUp() 方法中遇到了问题。

无论哪种方式,不知道我需要包括什么以及在哪里进行类似于食谱的香草魔力负载测试。有人有什么想法吗?

0 投票
5 回答
3192 浏览

maven - 如何使用以太获取所有 Maven 依赖项?

我正在尝试使用以太获取 Maven 工件的依赖项。我看到一个 RepositorySystem.collectDependencies(),但它只获取编译和运行时范围的依赖项。如何获取工件的所有依赖项,包括测试和提供?

0 投票
1 回答
1769 浏览

java - 如何以编程方式将工件添加到 MavenProject?

我正在编写一个 Maven 插件,我想自动解析特定的依赖项,并根据给予插件的参数将它们作为依赖项添加到项目中。

我已经能够通过aether成功解决依赖关系,但 aether 和 MavenProject 之间似乎存在脱节。

MavenProject#addAttachedArtifact 上有一个方法,我猜这就是我想要使用的方法。但是,它需要一个 org.apache.maven.artifact.Artifact,而从 aether 中检索到的是 org.sonatype.aether.artifact.Artifact。我发现一个插件在两者之间有一个转换方法,但我认为应该有一个更标准的方法。

我也尝试过使用 DefaultArtifactFactory 创建一个 org.apache.maven.artifact.Artifact,但在尝试获取 ArtifactHandler 时得到了 NullPointerException。

代码:

结果:

所以真的,这些是我尝试过的事情,解决这些问题会很棒,但我真的在寻找正确的方法来做到这一点。有任何想法吗?

更新

我在这两个类之间编写了自己的转换方法:

并发现 MavenProject#addAttachedArtifact 方法是将工件附加到现有工件(即将源/javadocs jar 附加到工件),这不是我的目标。相反,我从 maven 项目中获取了工件并添加了我的工件:

它将我的工件添加到项目中(然后当我调用项目的 getArtifactMap() 和 getCompileClasspathElements() 时显示我的工件。但是,这种更改不会持续存在。这是我真正担心的问题。所以问题已经演变成:

我可以对 MavenProject 进行更改并让它持续存在吗?