我在我的父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>
问题是每个孩子都插入basedir
而不是定义POM。我想我正在寻找等同于ANT的<property name="name" location="${basedir}"/>
。
答案 0 :(得分:6)
简短版本:问题的解决方案在documentation of the findbugs-maven-plugin中有所描述。您只需为包含findbugsFilter.xml
的构建配置创建一个单独的(顶级)项目,并将该项目作为依赖项引用。
长版本:不幸的是,从Maven中的父项目或兄弟项目访问资源有点复杂。原因是:在构建子项目时,Maven不能假设父模块是一级别的,或者兄弟项目在文件系统中处于同一级别。事实上,它不能假设任何这些项目甚至在某处检查过!仅检查单个子项目并按原样构建它是完全合法的。因此,当使用Maven构建时,从本地存储库加载所有内容(极少数例外)。这就是为什么您必须为要在多个模块中使用的资源创建单独的项目。然后可以将单独的项目添加为依赖项,并由一堆不同的Maven插件使用。示例包括:用于读取配置文件的checkstyle和findbugs插件,用于将外部文件复制到工件中的maven-dependency-plugin或用于加载外部属性文件的properties-maven-plugin。
答案 1 :(得分:4)
我有一个类似的问题,我希望子POM具有与父级相同的属性文件,但我无法使$ {project.parent.basedir}变量起作用。
然而,我所做的是在父级中创建一个变量,并在每个子Pom中覆盖相同的变量(这应该适用于大型poms ...虽然我没有任何)。
例如:
Parent POM:
<properties>
<my_basedir>${basedir}</my_basedir>
</properties>
Child POMs:
<properties>
<my_basedir>${basedir}/../</my_basedir>
</properties>
现在我只在父级中列出一次过滤器,其他人都得到它。如果您移动孩子,则只需更改相对路径。
<filters>
<filter>${my_basedir}/myfile.properties</filter>
</filters>
答案 2 :(得分: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>
第二个想法
另一个想法是使用$ {project.parent.basedir}:
...
<includeFilterFile>${project.parent.basedir}/findbugsFilter.xml</includeFilterFile>
...
答案 3 :(得分:0)
您是否放弃了在单独的工件中部署过滤器文件的想法?为什么呢?
绝对路径的问题在于,在构建子项目时,您无法保证父项目的源将出现在计算机上。这就是拥有存储库机制的重点。
你有没有尝试过我的建议?