【问题标题】:Trouble with the sonar-packaging-maven-plugin after refactoring重构后 sonar-packaging-maven-plugin 出现问题
【发布时间】:2014-05-13 13:26:04
【问题描述】:

我在为我的公司开发插件(后来称为“myPlugin”)时遇到了一些麻烦。

背景: 我正在阅读 Manning 公司的《SonarQube in Action》一书。 有一个开发自己的插件的小指南(他们使用 redmine 插件作为开发示例)。它告诉我使用 sonar-plugin-archetype 创建基本框架。

重构前的情况: 我写了插件,它工作正常。我在进行一些重构时遇到了这个问题。在重构我的树中 src 文件夹中的每个包之前(使用 ecplise)被称为“main.java.org.sonar.plugins.myplugin”,但每个类中的包删除是“org.sonar.plugins.myplugin”。这是使用 sonar-plugin-archetype 创建的默认设置。

sonar-packaging-maven-plugin 的 pom.xml 中的设置如下一次。

Pom-snippet before any changes were done:
<plugin>
   <groupId>org.codehaus.sonar</groupId>
   <artifactId>sonar-packaging-maven-plugin</artifactId>
   <version>1.9</version>
   <extensions>true</extensions>
   <configuration>
     <pluginClass>org.sonar.plugins.myplugin.myPlugin</pluginClass>
   </configuration>
</plugin>

到目前为止一切正常。现在我们来解决我的问题。

重构后的情况: 由于我的公司对类和包有一些命名约定,我将树中的包名更改为“com.mycompany.sonar.plugins.myplugin”,每个类中的包删除也更改为“com.mycompany.sonar.plugins.myplugin” ”。然后我将 sonar-packaging-maven-plugin 的 classPath 选项更改为“com.mycompany.sonar.plugins.myplugin.myPlugin”。我所做的只是改变“组织”。进入“com.mycompany”。

Pom-snippet after changes were done:
<plugin>
   <groupId>org.codehaus.sonar</groupId>
   <artifactId>sonar-packaging-maven-plugin</artifactId>
   <version>1.9</version>
   <extensions>true</extensions>
   <configuration>
     <pluginClass>com.mycompany.sonar.plugins.myplugin.myPlugin</pluginClass>
   </configuration>
</plugin>

当我运行“编译”命令时,一切正常。使用“包”不起作用,因为 sonar-packaging-maven-plugin 无法找到给定的类(请参阅下面的控制台输出)。当我再次将所有内容重新重构到开始时,它又可以工作了。

[...] 
[INFO] --- sonar-packaging-maven-plugin:1.9:sonar-plugin (default-sonar-plugin) @ sonar-projectkeychecker-plugin ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 19.649 s
[INFO] Finished at: 2014-04-02T11:42:01+01:00
[INFO] Final Memory: 13M/67M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.codehaus.sonar:sonar-packaging-maven-plugin:1.9:sonar-plugin (default-sonar-plugin) on project sonar-myplugin-plugin: Plugin class not found: 'com.mycompany.sonar.plugins.myplugin.myPlugin-> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

我的问题:为什么我的新名称不起作用? sonar-packaging-maven-plugin 是否有任何内部约定(比如包装名称必须以“org.sonar”开头或类似的东西)?

感谢您阅读这篇长文并尝试帮助我:)

【问题讨论】:

  • 可以提供新的POM sn-p吗?
  • 您到底想看什么?我将它添加到我的问题中(我已经确定没有打字错误)

标签: eclipse maven plugins sonarqube


【解决方案1】:

pluginClass 是插件的入口点。值必须是现有类。在您的示例中,我假设有一个错字,应该是 com.mycompany.sonar.plugins.myplugin.MyPlugin(大写 M)。

【讨论】:

  • 您可能知道:实际上这些类的名称与此处的名称不同。但正如我所说:pluginClass 指向现有类。我还确保没有打字错误或类似的东西。包路径和插件类都存在。 “大写 M”的想法不是失败的原因(在我的实际项目中,我确保类名以大写字母开头)。
  • 事实上 sonar-packaging-m-p 不会在项目类路径中搜索类。它会检查构建目录中是否存在相关的 .class 文件,因此您应该在执行 mp 时验证文件 ${project.build.outputDirectory}/com/mycompany/sonar/plugins/myplugin/MyPlugin.class 是否存在。
  • 我检查过了...你是对的!出于某种原因,在使用另一个包解密时不会创建 .class 数据,然后是给定的。即使使用“编译”命令也不行......但是:这不是我的问题的一部分。谢谢你帮助我:)
【解决方案2】:

&lt;plugin&gt; 下我缺少&lt;extensions&gt;true&lt;/extensions&gt; 标签

【讨论】:

    猜你喜欢
    • 2018-04-08
    • 2022-01-13
    • 1970-01-01
    • 2013-04-07
    • 2017-01-21
    • 1970-01-01
    • 2015-12-30
    • 2012-11-16
    相关资源
    最近更新 更多