我正在努力为一个项目做好准备。代码库开始膨胀,需要将其拆分为多个模块。但是,我们已经有一个有点专有的部署过程,并且目录结构不能因为Maven方式而受到损害。
简化结构如下:
/workspace/basesrc/
|_ superpom.xml
|_ com/company/parentpkg/
|_ ModuleA/
|_ pom.xml
|_SubAModuleA/
|_ SubAModuleAClass.java
|_ pom.xml
|_SubAModuleB/
|_ SubAModuleBClass.java
|_ pom.xml
|_ ModuleB/
|_ ModuleBClass.java
|_ pom.xml
我能够使用以下设置构建项目:
接近A
(superpom.xml):
<build>
<sourceDirectory>.</sourceDirectory>
</build>
这是由子模块继承的,实际上只构建其当前目录。
然而,如果出现此主题中所述的情况,Sonar似乎无法解析包名称:mvn sonar:sonar throws exception while doing Java AST scan。
方法B :指定根源目录并使用maven编译器包含,如下所述:http://maven.apache.org/guides/mini/guide-using-one-source-directory.html
(superpom.xml)
<build>
<sourceDirectory>/workspace/basesrc/</sourceDirectory>
</build>
(SubAModuleA pom.xml)
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<includes><include>com/company/parentpkg/ModuleA/SubAModuleA/**/*.java</include></includes>
</configuration>
</plugin>
</plugins>
</build>
同样,这适用于maven构建的情况。但是,尽管从子模块目录运行/workspace/basesrc/
,Sonar似乎还包括整个mvn sonar:sonar
文件夹。
我的问题是,
如果我使用方法A,有没有办法配置/覆盖Sonar Maven Plugin搜索Java源文件的根目录属性?它可以与$ {project.build.sourceDirectory} maven属性不同吗?
使用方法B,Sonar如何配置为仅分析maven-compiler-plugin正在构建的内容?
答案 0 :(得分:1)
对于有兴趣的人,只需重申<sonar.includes>
必须放在<properties>
下,而不是<configuration>
下的<plugin>
。并且声纳必须是3.5版本。
答案 1 :(得分:0)
好吧,我认为以下内容可以帮助您设置项目:http://maven.apache.org/guides/mini/guide-using-one-source-directory.html
参见以下部分:
从单一源目录生成多个唯一JAR
请理解,这不是应该在maven中设置的方式,因为你违反惯例,这使得maven如此强大。另一方面,我理解在某些项目中,没有选择将源结构更改为maven惯例所说的方式。