2

我正在尝试为 Maven 执行器插件编写一个自定义规则,该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");
        }
    }    

但是,我不知道在getProperties(artifact)方法中添加什么。这里的任何建议都会很棒,谢谢。

4

0 回答 0