Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 自定义Maven enforcer规则:如何获取Maven工件的属性?_Java_Maven_Maven Enforcer Plugin - Fatal编程技术网

Java 自定义Maven enforcer规则:如何获取Maven工件的属性?

Java 自定义Maven enforcer规则:如何获取Maven工件的属性?,java,maven,maven-enforcer-plugin,Java,Maven,Maven Enforcer Plugin,我正在尝试为Maven enforcer插件编写一个自定义规则,该规则与enforcer插件中包含的RequireSameVersions规则非常相似 我想看看一个项目的所有依赖项,如果它们有一个自定义属性集,那么我们必须确保所有依赖项的属性都相同(同时忽略没有该属性集的任何依赖项,因为它们是版本无关的) 我面临的问题是,在RequireSameVersions规则的代码中,工件的版本在API中公开,这样您就可以为每个依赖工件调用artifact.getVersion(),但是您似乎唯一可以调用

我正在尝试为Maven enforcer插件编写一个自定义规则,该规则与enforcer插件中包含的
RequireSameVersions
规则非常相似

我想看看一个项目的所有依赖项,如果它们有一个自定义属性集,那么我们必须确保所有依赖项的属性都相同(同时忽略没有该属性集的任何依赖项,因为它们是版本无关的)

我面临的问题是,在
RequireSameVersions
规则的代码中,工件的版本在API中公开,这样您就可以为每个依赖工件调用
artifact.getVersion()
,但是您似乎唯一可以调用
getProperties()
的对象是maven项目本身

因此,我真正想为自定义规则编写的代码是:

    public void execute(EnforcerRuleHelper helper) throws EnforcerRuleException {

        Set<String> versions = new HashSet<String>();

        MavenProject project = null;
        try {
            project = (MavenProject) helper.evaluate("${project}");
            Set<Artifact> dependentArtifacts = project.getDependencyArtifacts();
            for (Artifact artifact : dependentArtifacts) {
                Properties childProperties = getProperties(artifact); //TODO: what to put in this method
                String versionNumber = childProperties.getProperty("bespoke.version");
                if (versionNumber != null) {
                    versions.add(versionNumber);
                }
            }
        } catch (ExpressionEvaluationException eee) {
            throw new EnforcerRuleException(
                    "Unable to retrieve the MavenProject: ", eee);
        }

        if (versions.size() > 1) {
            // we have more than one version type across child projects, so we
            // fail the build.
            throw new EnforcerRuleException(
                    "modules of this project refer to more than one version");
        }
    }    
public void execute(EnforcerrulleHelper)抛出EnforcerrulleException{
Set versions=新的HashSet();
MavenProject=null;
试一试{
project=(MavenProject)helper.evaluate(“${project}”);
设置dependentArtifacts=project.getDependencyArtifacts();
for(工件工件:dependentArtifacts){
Properties childProperties=getProperties(工件);//TODO:在这个方法中放置什么
字符串versionNumber=childProperties.getProperty(“bespoke.version”);
if(versionNumber!=null){
版本。添加(版本号);
}
}
}捕获(表达式评估异常eee){
抛出新的EnforceCrruleException(
无法检索MavenProject:,eee);
}
如果(versions.size()>1){
//我们在子项目中有多个版本类型,因此
//构建失败。
抛出新的EnforceCrruleException(
“本项目的模块指多个版本”);
}
}    

但是,我不知道在
getProperties(artifact)
方法中放什么。这里的任何建议都会非常好,谢谢。

关于这个主题还有另一个问题:我已经回答了另一个问题。。。