【发布时间】:2013-07-16 22:19:08
【问题描述】:
我正在尝试 mavenize 一个项目。代码库开始膨胀,需要拆分成多个模块。但是,我们已经有了一些专有的部署过程,并且目录结构不能为了支持 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 构建的情况。但是,尽管从子模块目录运行 mvn sonar:sonar,Sonar 似乎包含整个 /workspace/basesrc/ 文件夹。
所以我的问题是,
如果我使用方法 A,有没有办法配置/覆盖 Sonar Maven 插件在其中搜索 Java 源文件的根目录属性?它可以与 ${project.build.sourceDirectory} maven 属性不同吗?
使用方法 B,如何将 Sonar 配置为仅分析 maven-compiler-plugin 正在构建的内容?
【问题讨论】:
-
我认为告诉我们 SubAModuleAClass 有什么包很重要。是 com.company.parentpkg.ModuleA.SubAModuleA 吗?如果是这样,我看不出那里有任何子模块层次结构的原因。只需去 superpom 并在那里进行分析。
-
嗨彼得,是的,它是 com.company.parentpkg.ModuleA.SubAModuleA。然而,这个包的内容是一个独立的模块。此外,这就是实施多模块项目的重点,对吧?为了能够将源代码库分离为自包含的可重用组件?
-
好吧,在 maven 中,您的每个子模块都应该包含完整的包层次结构,而不仅仅是一个最终类