【问题标题】:Analyzing Javascript with PMD Maven使用 PMD Maven 分析 Javascript
【发布时间】:2017-02-06 05:18:53
【问题描述】:

我目前正在尝试将 PMD 作为我们公司可以使用的一种可能的静态分析工具。我已经分析了 Java 文件,没有任何问题,但我似乎无法用 Javascript 来做,每次我执行 pmd:pmd 它只是再次分析 java 文件。无论如何,这是我的 POM.xml 的 sn-p:

*使用 Maven 3.3.1

<build>
  <plugins>
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <version>3.0.0</version>
        <configuration>
        <sources>
            ${basedir}/src/main/webapp/js
        </sources>
        </configuration>
        <executions>
            <execution>
                <goals>
                    <goal>add-source</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
  </plugins>
</build>

<reporting>
  <plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-pmd-plugin</artifactId>
        <version>3.7</version>
        <configuration>
        <language>javascript</language>
        <rulesets>
            <ruleset>ecmascript-basic</ruleset>
            <ruleset>ecmascript-braces</ruleset>
            <ruleset>ecmascript-unnecessary</ruleset>
        </rulesets>
        <includes>
            <include>**/*.js</include>
        </includes>
        </configuration>
    </plugin>
 </plugins>
</reporting>

所以我只是按照this 中指示的说明进行操作,但似乎无法使其工作。你们能告诉我是否缺少一些必需的设置/配置吗? TIA。

【问题讨论】:

  • include 错误,您使用的是*/.js,而不是**/*.js
  • 谢谢,我再分析一下。
  • 还是不行。我执行 mvn pmd:pmd 或 pmd:check 有关系吗?另外,我通过执行 mvn site:deploy 将结果发布到 maven 站点。

标签: javascript maven maven-plugin pmd


【解决方案1】:

您的配置是正确的(假设缺少 &lt;plugins&gt; 标记只是编辑问题)。很可能您没有运行正确的 Maven 目标。

使用您当前的配置,PMD 将在站点生成期间作为报告运行,即mvn site。但是,如果这样做,build-helper-maven-plugin:add-source 目标将不会运行,并且不会找到源。

解决这个问题的最基本(无用)方法就是调用mvn generate-sources site

您可以通过如下更改插件配置让add-sourcemvn site 上自动运行:

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <version>3.0.0</version>
            <executions>
                <execution>
                    <id>config-js</id>
                    <phase>pre-site</phase>
                    <goals>
                        <goal>add-source</goal>
                    </goals>
                    <configuration>
                        <sources>${basedir}/src/main/javascript</sources>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

在这里,phase 设置为 pre-site 具有将执行挂钩到 site 生命周期开头的魔力。

如果您希望能够使用mvn pmd:pmdmvn pmd:check 运行PMD,那么您的配置应该稍有不同。 PMD 插件不应该是&lt;reporting&gt; 部分的一部分,而是&lt;build&gt; 的一部分。不幸的是,PMD maven 插件不会将自己与生命周期事件挂钩,因此在这种情况下,我们必须手动确保 build-helper-maven-plugin:add-source 已运行。再一次,我们可以使用mvn generate-sources pmd:pmd

【讨论】:

  • build-helper-maven-plugin:add-source 不再需要使用 maven-pmd-plugin 3.7 - 只要您像在 example 中一样配置 compileSourceRoots - 如果您使用 maven 3.3.9(见MPMD-212MPMD-206
  • @johnco 现在正在工作。只需要在 中传输 pmd 插件并执行 mvn pmd:pmd。我现在需要做的就是将结果传递给 maven 站点。非常感谢。
猜你喜欢
  • 2010-12-05
  • 2011-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多