gpt4 book ai didi

maven - 以编程方式使用 Maven

转载 作者:行者123 更新时间:2023-12-05 00:30:26 30 4
gpt4 key购买 nike

我需要制作一个下载maven项目并打印其依赖项的小程序

像这样:

MavenArtifactRepository repository = new MavenArtifactRepository("typesafe", "http://repo.typesafe.com/typesafe/releases/", ..., ..., ...);
downloadAndPrintDependencies(repository, "org.hsqldb", "hsqldb", "2.2.9");

void downloadAndPrintDependencies(repository, groupId, artifactId, version) {
MavenProject projectDescription = new MavenProject("org.hsqldb", "hsqldb", "2.2.9");
Artifact artifact = repository.getProject(projectDescription); // this would download the artificat in the local repository if necessary

List<Dependency> dependecies = artifact.getDependencies();
...
}

并且,可以在 Maven 项目上执行目标,如下所示:
String pomXmlFile = "/tmp/myproject/pom.xml";
Reader reader = new FileReader(pomXmlFile);
MavenXpp3Reader xpp3Reader = new MavenXpp3Reader();
Model model = xpp3Reader.read(reader);

ProjectArtifact projectArtifact = new ProjectArtifact(model);
projectArtifact.clean();
projectArtifact.install();

关于伪代码的任何反馈?

从存储库中获取 Artifact 的正确类和函数是什么?

在 Maven 项目上执行目标(例如清理和安装)的正确类和函数是什么?

最佳答案

好的

我有 a project, Naether,这是 Maven 的依赖解析库 Aether 的包装器。

使用 Naether,您可以解决依赖关系

import com.tobedevoured.naether.api.Naether;
import com.tobedevoured.naether.impl.NaetherImpl;

Naether naether = new NaetherImpl();
naether.addDependency( "ch.qos.logback:logback-classic:jar:0.9.29" );
naether.addDependency( "junit:junit:jar:4.8.2" );
naether.resolveDependencies();
System.out.println( naether.getDependenciesNotation().toString() );

将输出:
["ch.qos.logback:logback-core:jar:0.9.29",
"ch.qos.logback:logback-classic:jar:0.9.29",
"junit:junit:jar:4.8.2",
"org.slf4j:slf4j-api:jar:1.6.1" ]

坏的

我不知道如何通过 Java 构建(例如编译源代码)pom.xml。我已经搜索了一点,但没有找到一个具体的例子。一个 ProjectArtifact只是 Maven 用来解析 POM 的 Artifact 描述符,例如父 POM。它不公开构建操作。由于构建 Maven 项目的方法有百万种,因此没有简单的安装方法。您必须以某种方式开始安装过程的生命周期。

Naether能做什么,先建好项目,有 Naether install它:
import com.tobedevoured.naether.api.Naether;
import com.tobedevoured.naether.impl.NaetherImpl;

Naether naether = new NaetherImpl();
naether.install( "com.example:sample:0.0.1", "/tmp/myproject/pom.xml", "/tmp/myproject/target/sample-0.0.1.jar" )

更新 - 它们是如何组合在一起的?

构建、部署、安装等项目很复杂。 Maven 在简化它方面做得很好。尽管 Maven 任务只是安装,但它的工作涉及许多步骤。对于简单的 Java 项目,这意味着填充类路径、编译源代码、打包 jar,然后将其安装在本地 Maven 存储库中。当您谈论打包 Java 项目的其他方法时,事情只会变得更加复杂,例如一场 war 。

Maven 的人做了艰苦的工作,并将依赖解析分离到自己的库中, Aether .这完成了处理 Artifact 的所有繁重工作。 Aether 可以让你弄清楚项目的依赖项是什么,下载依赖项。 Aether 还允许您在本地安装 Artifact 或将其部署到远程存储库。

Aether 不做的是管理项目。它不会清理目标目录或编译源。

我用 Naether 创建的只是一种访问 Aether 的简化方式。

关于maven - 以编程方式使用 Maven,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16084345/

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