2

こんにちは、Java (mvn コンソールではなく) を使用して Maven プロジェクトのすべての依存関係を取得できる簡単な方法がありますか、または mvn で使用されるアルゴリズムは何ですか? ありがとう

モデル (org.apache.maven.model) が見つかりました。以下のコードは、変数 (たとえば、'<'version>${mavenVersion}'</'/version>) が見つかるまで機能します。

    System.out.println("依存関係" + d.getArtifactId());
        if(d.isOptional()){
            戻る;
        }
        if(d.getVersion()==null){
            if(mod.getParent()!=null){

            試す{

                MavenArtifact mart=new MavenArtifact();
                mart.setArtifactId(mod.getParent().getArtifactId());
                mart.setGroupId(mod.getParent().getGroupId());
                mart.setVersion(mod.getParent().getVersion());
                mart.setRepositoryUrl(mA.getRepositoryUrl());
                モデル fMod = getModelFromPom(mart, p);
                if(fMod.getDependencyManagement()!=null){
                    for (依存関係 dep : fMod.getDependencyManagement().getDependencies()) {
                        if(dep.getArtifactId().equals(d.getArtifactId())&dep.getGroupId().equals(d.getGroupId())){
                            getDependency (fMod、マート、p、dep);
                        }
                    }

                    for (依存関係 dep : fMod.getDependencies()) {
                        if(dep.getArtifactId().equals(d.getArtifactId())&dep.getGroupId().equals(d.getGroupId())){
                            getDependency (fMod、マート、p、dep);
                        }
                    }
                }}


                キャッチ(例外e){
                    e.printStackTrace();
                    view.showWarning("見つかりませんでした: groupId:"
                            + d.getGroupId() + "artifactId"
                            + d.getArtifactId() + "バージョン:"
                            + d.getVersion());
                }
            }そうしないと{
                view.showWarning("見つかりませんでした: groupId:"
                        + d.getGroupId() + "artifactId"
                        + d.getArtifactId() + "バージョン:"
                        + d.getVersion());


            }
        }そうしないと{
        MavenArtifact m = proxy.findDependency(d.getGroupId(), d
                .getArtifactId()、d.getVersion());

        もし (m == null) {
            view.showWarning("見つかりませんでした: groupId:"
                    + d.getGroupId() + "artifactId"
                    + d.getArtifactId() + "バージョン:"
                    + d.getVersion());

            戻る;
        }
        importMavenArtifact(m, p);



4

2 に答える 2

2

2.x の動作に合わせたい場合は、maven-dependency-plugin のソースをお読みください。3.x に合わせる必要がある場合は、エーテルについて学ぶ必要があると思います。

于 2011-05-25T16:56:18.627 に答える
1

Aether のラッパーであるjcabi-aetherを使用してみてください。まず、すべてのプロジェクトの依存関係のリストを取得する必要があります。

List<Artifact> deps = this.project.getDependencies();

次に、それらのすべてについて、すべての推移的な依存関係のリストを取得できます。

File repo = this.session.getLocalRepository().getBasedir();
Collection<Artifact> deps = new Aether(this.getProject(), repo).resolve(
  new DefaultArtifact("junit", "junit-dep", "", "jar", "4.10"),
  JavaScopes.RUNTIME
);

詳細は間違っているかもしれませんが、一般的にはこのように動作するはずです。

于 2012-10-28T12:43:44.077 に答える