Java Maven 3插件-如何通过编程排除依赖项及其所有可传递依赖项?

Java Maven 3插件-如何通过编程排除依赖项及其所有可传递依赖项?,java,maven,maven-3,maven-plugin,Java,Maven,Maven 3,Maven Plugin,我正在开发一个Maven 3插件,当插件中的配置设置为true时,我想排除一些依赖项及其可传递的依赖项 我不想在POM本身中使用,即使是在配置文件中。我想通过编程排除这些依赖项。事实上,当插件配置设置为true时,我想要的是防止依赖项jar包含在最终的war中(我正在构建一个war) 我试过: @Mojo(requiresDependencyResolution=ResolutionScope.COMPILE, name="compileHook",defaultPhase=LifecycleP

我正在开发一个Maven 3插件,当插件中的配置设置为
true
时,我想排除一些依赖项及其可传递的依赖项

我不想在POM本身中使用
,即使是在配置文件中。我想通过编程排除这些依赖项。事实上,当插件配置设置为
true
时,我想要的是防止依赖项jar包含在最终的war中(我正在构建一个war)

我试过:

@Mojo(requiresDependencyResolution=ResolutionScope.COMPILE, name="compileHook",defaultPhase=LifecyclePhase.COMPILE)
public class compileHook extends AbstractMojo
{
    @Override
    public void execute() throws MojoExecutionException, MojoFailureException
    {
        // ...
        Set<Artifact> artifacts = this.project.getArtifacts();
        for(Artifact artifact : artifacts)
        {
            if("org.package.to.remove".equalsIgnoreCase(artifact.getGroupId()))
            {
                artifact.setScope("provided");
            }
        }
        // ...
    }
}
@Mojo(requiresdependencysolution=ResolutionScope.COMPILE,name=“compileHook”,defaultPhase=LifecyclePhase.COMPILE)
公共类compileHook扩展了AbstractMojo
{
@凌驾
public void execute()抛出MojoExecutionException,MojoFailureException
{
// ...
Set artifacts=this.project.getArtifacts();
for(工件工件:工件)
{
if(“org.package.to.remove.equalsIgnoreCase(artifact.getGroupId()))
{
人工制品。设置范围(“提供”);
}
}
// ...
}
}
由于这发生在
编译
阶段,因此它确实会在打包时将组id为“org.package.to.remove”的工件从war中移除。但是这并不会删除那些依赖项添加的可传递工件


通过编程从最终的.jar/.war中删除某些依赖项及其可传递依赖项的最佳方法是什么?

我想到的第一个问题是:如果已经有maven war插件,为什么需要插件?什么不是你需要的?除此之外,如果您硬编码要排除的东西,这听起来真的很奇怪,这完全违背了Maven在POM中声明或排除依赖项的想法。这将是只有那些谁知道你的插件可见。如果您只看到pom.xml,您将迷路。您可能需要为提供的此类依赖项设置范围?khmarbaise,谢谢您的帮助。我不想深入讨论我为什么需要这样做。但请确保我同意你所说的,但我仍然需要按程序来做!你所描述的听起来很像maven的个人资料,你能给我们更多关于你想要实现什么的细节吗?Allen,正如我所说的,我不想太详细地说明我为什么要这么做。如果问题本身不够清楚,请告诉我,我会更新它!谢谢你的帮助。