java – 以编程方式解析插件外的Maven依赖项 – 获取RepositoryS
发布时间:2020-12-14 06:05:49 所属栏目:Java 来源:网络整理
导读:也许这将是一个比我最初想到的更大的任务,但不管我试图从一个文件加载一个MavenProject,然后解决它的依赖.我有两个代码,但我缺少一些我需要的对象引用;具体来说我需要获取RepositorySystemSession和RepositorySystem的实例.任何提示? 注意:我用maven-plugi
也许这将是一个比我最初想到的更大的任务,但不管我试图从一个文件加载一个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; } 解决依赖关系: 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; } 我知道这可能是一个不寻常的要求,也许我应该只是废弃我正在做的事情,并把它作为一个插件包装…但我只是想完成我现在开始!提前致谢. 解决方法
尝试
jcabi-aether,这是一个包装从
Apache Aether从Sonatype:
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 ); 如果你是外面的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,JavaScopes.RUNTIME ); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |