Maven插件工件过滤不重要的依赖关系

时间:2012-01-21 17:08:01

标签: maven maven-2 maven-plugin maven-3 maven-dependency-plugin

我正在开发一个Maven插件并使用MavenProject对象来访问project.getDependencyArtifacts()的依赖项,但是这给了我所有的jar,甚至只测试了jar。

是否有一些方法可以过滤所有非运行时jar?如果我只是获取范围并比较scope.equals("runtime"),我将抛弃编译和其他重要依赖项。

1 个答案:

答案 0 :(得分:1)

我没有找到现有的方法,所以我使用以下逻辑。这是一个构建自定义ear的插件,它将所需的依赖项添加到xml文件中并将它们包含在归档中。它使用getArtifacts而不是getDependencyArtifacts,因为我也对传递依赖感兴趣。

    Collection<Artifact> dependencies = new ArrayList<Artifact>();
    dependencies.addAll(project.getArtifacts());
    for (Iterator<Artifact> it=dependencies.iterator(); it.hasNext(); ) {
        Artifact dependency = it.next();
        String scope = dependency.getScope();
        String type = dependency.getType();
        if (dependency.isOptional() || !"jar".equals(type) || "provided".equals(scope) || "test".equals(scope) || "system".equals(scope)) {
            getLog().debug("Pruning dependency " + dependency);
            it.remove();
        }
    }