Ed *_*d . 12 java maven-plugin maven aether
也许这将是一个比我原先想象的更大的任务,但无论如何,我正在尝试MavenProject从文件加载一个文件,然后解决它的依赖关系.我有两个位的代码,但我缺少一些我需要的对象引用; 特别是我需要得到RepositorySystemSession和的实例 RepositorySystem.有小费吗?
注意:我用maven-plugin标记了这个问题,但这不是Maven插件.我很高兴要求Maven 3(想想我已经有了......)
这是我到目前为止的代码:
构建MavenProject:
public static MavenProject loadProject(File pomFile) throws Exception
{
MavenProject ret = null;
MavenXpp3Reader mavenReader = new MavenXpp3Reader();
if (pomFile != null && pomFile.exists())
{
FileReader reader = null;
try
{
reader = new FileReader(pomFile);
Model model = mavenReader.read(reader);
model.setPomFile(pomFile);
ret = new MavenProject(model);
}
finally
{
// Close reader
}
}
return ret;
}
Run Code Online (Sandbox Code Playgroud)
解决依赖关系:
public static List<Dependency> getArtifactsDependencies(MavenProject project, String dependencyType, String scope) throws Exception
{
DefaultArtifact pomArtifact = new DefaultArtifact(project.getId());
RepositorySystemSession repoSession = null; // TODO
RepositorySystem repoSystem = null; // TODO
List<RemoteRepository> remoteRepos = project.getRemoteProjectRepositories();
List<Dependency> ret = new ArrayList<Dependency>();
Dependency dependency = new Dependency(pomArtifact, scope);
CollectRequest collectRequest = new CollectRequest();
collectRequest.setRoot(dependency);
collectRequest.setRepositories(remoteRepos);
DependencyNode node = repoSystem.collectDependencies(repoSession, collectRequest).getRoot();
DependencyRequest projectDependencyRequest = new DependencyRequest(node, null);
repoSystem.resolveDependencies(repoSession, projectDependencyRequest);
PreorderNodeListGenerator nlg = new PreorderNodeListGenerator();
node.accept(nlg);
ret.addAll(nlg.getDependencies(true));
return ret;
}
Run Code Online (Sandbox Code Playgroud)
我意识到这可能是一个不寻常的请求,也许我应该废弃我想要做的事情并将其作为插件包装......但我只是想完成我现在开始的事情!提前致谢.
我建议阅读有关Aether lib的信息,这正是出于这种目的.
注意:Aether之前是在Sonatype开发的,但后来转移到了Eclipse.
试试jcabi-aether,它是来自Sonatype的Apache Aether的包装:
final File repo = this.session.getLocalRepository().getBasedir();
final Collection<Artifact> deps = new Aether(this.getProject(), repo).resolve(
new DefaultArtifact("junit", "junit-dep", "", "jar", "4.10"),
JavaScopes.RUNTIME
);
Run Code Online (Sandbox Code Playgroud)
如果你不在Maven插件中:
final File repo = new File(System.getProperty("java.io.tmpdir"), "my-repo");
final MavenProject project = new MavenProject();
project.setRemoteArtifactRepositories(
Arrays.asList(
new RemoteRepository(
"maven-central",
"default",
"http://repo1.maven.org/maven2/"
)
)
);
final Collection<Artifact> deps = new Aether(project, repo).resolve(
new DefaultArtifact("junit", "junit-dep", "", "jar", "4.10"),
JavaScopes.RUNTIME
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16570 次 |
| 最近记录: |