1

我可以使用evaluateBeanshell规则来强制执行一些约定:src 下面的目录中没有冒号。

<plugin>
  <artifactId>maven-enforcer-plugin</artifactId>
  <version>1.4.1</version>
  <executions>
    <execution>
      <id>enforce-beanshell</id>
      <goals>
        <goal>enforce</goal>
      </goals>
      <configuration>
        <rules>
          <evaluateBeanshell>
            <condition>org.codehaus.plexus.util.FileUtils.getDirectoryNames(new File("src"), "**/*:*", null, false).isEmpty()</condition>
          </evaluateBeanshell>
        </rules>
      </configuration>
    </execution>
  </executions>
</plugin>

但是有些项目没有 src 目录,规则会很难失败。我试过设置

<condition>org.codehaus.plexus.util.FileUtils.getDirectoryNames(new File("."), "src/**/[^A-Z]*", null, false).isEmpty()</condition>

如何安全地捕获 src 目录的不存在?

4

2 回答 2

1

这可以满足我的需要

<evaluateBeanshell>
  <condition>
    String projectSource = "${project.basedir}" + "/src";
    if (org.codehaus.plexus.util.FileUtils.fileExists(projectSource)){
      List filenames = org.codehaus.plexus.util.FileUtils.getFileNames(
        new File(projectSource),"**/*.*",null,false);

      for (Iterator it = filenames.iterator(); it.hasNext();) {
        String file = it.next();
        String extension = org.codehaus.plexus.util.FileUtils.getExtension(file);

        if (extension.equals(extension.toLowerCase())) {
          it.remove();
        } else {
          print("Invalid filename extension (no capitals): " + projectSource + "/" + file);
        };
      };
      return filenames.isEmpty();
    } else return true;
  </condition>
</evaluateBeanshell>
于 2020-12-17T12:35:13.410 回答
0

如果你想使用 Beanshell,你只需要返回一个布尔值的东西。

<evaluateBeanshell>
   <condition>new java.io.File("src").exists()</condition>
</evaluateBeanshell>

如果路径作为文件/文件夹/符号链接存在,则为 true,否则为 false,这将破坏构建。

如果要检查多个方面,例如是否存在并且是否为目录,请添加多个条件:

<evaluateBeanshell>
   <condition>new java.io.File("path").exists()</condition>
   <condition>new java.io.File("path").isDirectory()</condition>
</evaluateBeanshell>

(可以说检查它是否存在然后它是否是一个目录没有什么意义,但有助于说明这一点)

如果您必须使用 Beanshell,还可以做很多事情。但最终,'requireFilesExist' 规则可能是实施者的更好配置。

于 2020-12-15T17:17:18.050 回答