嵌套Maven属性在引用POM时评估,而不是定义POM

sbl*_*ndy 7 maven-2 findbugs maven-plugin

我在我的父pom中定义了一个报告配置,它将在每个子孙项目中运行.

像这样:

<reporting>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>findbugs-maven-plugin</artifactId>
            <version>1.2</version>
            <configuration>
                <xmlOutput>true</xmlOutput>
                <threshold>Low</threshold>
                <effort>Min</effort>
                <includeFilterFile>${basedir}/findbugsFilter.xml</includeFilterFile>
            </configuration>
        </plugin>
    </plugins>
</reporting>
Run Code Online (Sandbox Code Playgroud)

麻烦的是每个孩子都插入它basedir而不是定义POM.我想我正在寻找与ANT相当的东西<property name="name" location="${basedir}"/>.

Tho*_*rti 6

简短版本:findbugs-maven-plugin文档中描述了您的问题的解决方案.您只需为构建配置创建一个单独的(顶级)项目,该项目包含您findbugsFilter.xml作为依赖项的项目和引用.

长版本:不幸的是,从Maven中的父项目或兄弟项目访问资源有点复杂.原因是:在构建子项目时,Maven不能假设父模块是一级别的,或者兄弟项目在文件系统中处于同一级别.事实上,它不能假设任何这些项目甚至在某处检查过!仅检查单个子项目并按原样构建它是完全合法的.因此,当使用Maven构建时,从本地存储库加载所有内容(极少数例外).这就是为什么您必须为要在多个模块中使用的资源创建单独的项目.然后可以将单独的项目添加为依赖项,并由一堆不同的Maven插件使用.示例包括:用于读取配置文件的checkstyle和findbugs插件,用于将外部文件复制到工件中的maven-dependency-plugin或用于加载外部属性文件的properties-maven-plugin.


Rom*_*las 0

我不确定这是否可以解决您的问题,但我有两个想法您可以尝试:

第一个想法

在父pom中定义一个属性,并在报告配置中使用它:

<properties>
    <parent-basedir>${basedir}</parent-basedir>
</properties>
...
<reporting>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>findbugs-maven-plugin</artifactId>
            <version>1.2</version>
            <configuration>
                <xmlOutput>true</xmlOutput>
                <threshold>Low</threshold>
                <effort>Min</effort>
                <includeFilterFile>${parent-basedir}/findbugsFilter.xml</includeFilterFile>
            </configuration>
        </plugin>
    </plugins>
</reporting>
Run Code Online (Sandbox Code Playgroud)

第二个想法

另一个想法是使用 ${project.parent.basedir}:

...
<includeFilterFile>${project.parent.basedir}/findbugsFilter.xml</includeFilterFile>
...
Run Code Online (Sandbox Code Playgroud)