Java 自定义Maven enforcer规则:如何获取Maven工件的属性?
我正在尝试为Maven enforcer插件编写一个自定义规则,该规则与enforcer插件中包含的Java 自定义Maven enforcer规则:如何获取Maven工件的属性?,java,maven,maven-enforcer-plugin,Java,Maven,Maven Enforcer Plugin,我正在尝试为Maven enforcer插件编写一个自定义规则,该规则与enforcer插件中包含的RequireSameVersions规则非常相似 我想看看一个项目的所有依赖项,如果它们有一个自定义属性集,那么我们必须确保所有依赖项的属性都相同(同时忽略没有该属性集的任何依赖项,因为它们是版本无关的) 我面临的问题是,在RequireSameVersions规则的代码中,工件的版本在API中公开,这样您就可以为每个依赖工件调用artifact.getVersion(),但是您似乎唯一可以调用
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)
方法中放什么。这里的任何建议都会非常好,谢谢。关于这个主题还有另一个问题:我已经回答了另一个问题。。。