maven mvn dependency:go-offline -如何在命令行上设置参数

bxpogfeg  于 2023-10-17  发布在  Maven
关注(0)|答案(2)|浏览(407)

我想下载所有东西,除了我自己的依赖项,我还没有编译。我想我需要的是excludeGroupIds,但是我如何在命令行上设置它,或者https://maven.apache.org/plugins/maven-dependency-plugin/go-offline-mojo.html中的其他东西?
我已经试过这个

mvn dependency:go-offline -DexcludeGroupIds=com.example

我也试过在pom.xmlsettings.xml中设置它们,也没能让它们有任何效果。

voase2hg

voase2hg1#

通过检查maven-dependency-plugin的代码,我非常确定这是一个bug,因为过滤器不适用于go-offline。以下是在go-offline mojo实现(版本3.1.3-SNAPSHOT)中解析依赖关系的代码:

protected Set<Artifact> resolveDependencyArtifacts()
        throws DependencyResolverException
{
    final Collection<Dependency> dependencies = getProject().getDependencies();
    final Set<DependableCoordinate> dependableCoordinates = new HashSet<>();

    final ProjectBuildingRequest buildingRequest = newResolveArtifactProjectBuildingRequest();

    for ( Dependency dependency : dependencies )
    {
        dependableCoordinates.add( createDependendableCoordinateFromDependency( dependency ) );
    }

    return resolveDependableCoordinate( buildingRequest, dependableCoordinates, "dependencies" );
}

在合同中,这里是解决resolve mojo依赖关系的代码:

@Override
protected void doExecute()
    throws MojoExecutionException
{
    // get sets of dependencies
    results = this.getDependencySets( false, includeParents );

    ...
}

AbstractDependencyFilterMojo:

protected DependencyStatusSets getDependencySets( boolean stopOnFailure, boolean includeParents )
    throws MojoExecutionException
{
    // add filters in well known order, least specific to most specific
    FilterArtifacts filter = new FilterArtifacts();

    filter.addFilter( new ProjectTransitivityFilter( getProject().getDependencyArtifacts(),
                                                     this.excludeTransitive ) );

    filter.addFilter( new ScopeFilter( DependencyUtil.cleanToBeTokenizedString( this.includeScope ),
                                       DependencyUtil.cleanToBeTokenizedString( this.excludeScope ) ) );

    filter.addFilter( new TypeFilter( DependencyUtil.cleanToBeTokenizedString( this.includeTypes ),
                                      DependencyUtil.cleanToBeTokenizedString( this.excludeTypes ) ) );

    filter.addFilter( new ClassifierFilter( DependencyUtil.cleanToBeTokenizedString( this.includeClassifiers ),
                                            DependencyUtil.cleanToBeTokenizedString( this.excludeClassifiers ) ) );

    filter.addFilter( new GroupIdFilter( DependencyUtil.cleanToBeTokenizedString( this.includeGroupIds ),
                                         DependencyUtil.cleanToBeTokenizedString( this.excludeGroupIds ) ) );

    filter.addFilter( new ArtifactIdFilter( DependencyUtil.cleanToBeTokenizedString( this.includeArtifactIds ),
                                            DependencyUtil.cleanToBeTokenizedString( this.excludeArtifactIds ) ) );

    ...

很明显,go-offline的代码在解析依赖关系时没有应用这些过滤器。所以我插入了一个项目的票来确认:https://issues.apache.org/jira/browse/MDEP-725

aoyhnmkz

aoyhnmkz2#

maven-dependency-plugin的3.6.0版本开始,或者更早,go-offline目标似乎尊重excludeReactor选项。无论如何,这对我的项目很有帮助。该选项默认为true,并且似乎阻止了当前项目的子模块的解析,尽管出于某种原因,描述(似乎不准确)将其本身限制为“插件”。所以,如果你使用的是一个新版本的依赖插件,你应该不需要额外的步骤来完成你的目标默认情况下; excludeGroupIds不需要。
也就是说,MDEP-689仍然是开放的,所以我不确定excludeGroupIds本身现在是否工作。

相关问题