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

问题描述 投票:0回答:2

我想下载除了我自己的依赖项之外的所有内容,我还没有编译它。我认为我需要的是

excludeGroupIds
,但是如何设置它,或者 https://maven.apache.org/plugins/maven-dependency-plugin/go-offline-mojo.html 中的其他内容命令行?

这个我试过了

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

我也尝试过将它们设置为

pom.xml
settings.xml
,但没能让它们产生任何效果。

maven maven-dependency-plugin
2个回答
5
投票

通过检查 maven-dependency-plugin 的代码,我很确定这是一个错误,因为过滤器不适用于

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


0
投票

maven-dependency-plugin
的 3.6.0 开始,也许更早,
go-offline
目标似乎尊重
excludeReactor
选项。无论如何,它对我的项目有用。此选项默认为 true,并且似乎阻止了当前项目子模块的解析,尽管“描述”(似乎不准确)由于某种原因将其自身限制为“插件”。因此,如果您使用的是较新版本的依赖插件,则默认情况下您不需要额外的步骤即可实现您的目标; excludeGroupIds 不需要。
也就是说,

MDEP-689

仍然开放,所以我不确定 excludeGroupIds 本身现在是否正常工作。

    

© www.soinside.com 2019 - 2024. All rights reserved.