Я успешно создал правило calculateBeanshell с плагином maven-enforcer-plugin, который сканирует файлы в рабочей области на предмет распространенных ошибок.
С жестко заданным путем правило работает нормально. Когда я хочу использовать переменную $ {project.basedir} из окружающего pom, скрипт прерывается на моей Windows машине.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>${maven-enforcer-plugin.version}</version>
<executions>
<execution>
<id>enforce-banned-dependencies</id>
<inherited>true</inherited>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<evaluateBeanshell>
<condition>
import scanner.MyScanner;
scanner = new MyScanner();
//hack to read root dir
//project.basedir crashes beanshell with its backslashes
rootPath = new File("");
root = new File(rootPath.getAbsolutePath());
print("Scanning in: " + root);
print("${project.artifactId}"); // works fine
print("${project.basedir}"); // breaks the code
scanner.loopThroughProjects(root);
return everythingIsFine;
</condition>
</evaluateBeanshell>
</rules>
<fail>true</fail>
</configuration>
</execution>
</executions>
В отладочном выводе строка:
print("${project.basedir}");
был заменен на:
print("D:\code\my-maven-project");
Есть ли другое свойство maven с очищенными косыми чертами или есть другой способ доступа к $ {project.basedir}? Хак, описанный в примере кода, работает, но мне не нравятся хаки, которые заставляют меня оставлять комментарии.