1

我有一个非maven项目,但我必须使用Sonar进行一次代码分析。所以我创造了一个pom.xml效果很好的。我src使用这个 pom 文件看到了对我的目录下所有文件和文件夹的分析:

<project
    xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>my.group.id</groupId>
    <artifactId>arifactId</artifactId>
    <version>1.0</version>
    <packaging>pom</packaging>
    <name>MyApplication</name>
    <build>
        <sourceDirectory>src</sourceDirectory>
    </build>

    <properties>
        <sonar.dynamicAnalysis>false</sonar.dynamicAnalysis>
    </properties>
</project>

但我想排除一个目录及其所有子目录。我有两个目录src/fr/src/com/. 我只想拥有src/fr/和排除src/com/. 改变

<sourceDirectory>src</sourceDirectory>

<sourceDirectory>src/fr</sourceDirectory>

我收到此错误:

Failed to execute goal org.codehaus.mojo:sonar-maven-plugin:2.0:sonar 
(default-cli) on project arifactId: Can not execute Sonar: Sonar is 
unable to analyze file : '/Users/tim/workspace/src/fr/xxx/dao/TestClass.java': 
The source directory does not correspond to the package declaration fr.xxx.dao
4

1 回答 1

2

通常,正如它告诉我们的那样,当java 文件中声明的与目录结构不对应The source directory does not correspond to the package declaration时,它是一个错误,例如package

package my.test.java;
public class MyTest {}

The directory should be my/test/java/MyTest.java, 
please note the src is treated as a sourceDirectory.

在您的情况下,您已将sourceDirectoryfrom更改srcsrc/frthat 意味着

package fr.xxx.dao;
public class TestClass{}

The directory is xxx/dao/TestClass.java, 
please note the src/fr is treated as a sourceDirectory. Then the fr is ignored.

通常,当我们想从 Sonar 分析中排除 somes 包时,可以通过在每个质量 maven 插件中设置它们来简单地完成,例如findbugs, PMD,cobertura等。

无论如何,Sonar 也为每个项目提供了配置。我们可以使用以下步骤进行设置:-

请注意:我使用的是 Sonar 3.5 版,如果您使用不同的版本,菜单可能会有所不同。

  1. 访问我们的声纳网站,例如https://myhost/sonar
  2. 通过从仪表板中选择它来转到我们的项目。
  3. 在右上角,您将看到Configuration菜单。单击它并选择Settings
  4. Settings页面上,选择Exclusions菜单。
  5. Exclusions您可以简单地设置也可以使用通配符的排除模块。(您可能会在页面底部看到示例。)
  6. 您的案例中的示例,排除项应该是fr/**. (排除文件夹 fr 下的所有内容)。

请参考以下链接:-

  1. 项目管理
  2. 排除文件
  3. 分析参数

我希望这可能会有所帮助。

于 2013-03-25T01:27:03.770 回答