2014-04-02 1 views
0

"myPlugin"이라는 플러그인을 개발하는 데 어려움이 있습니다.리팩토링 후 sonar-packaging-maven-plugin에 문제가 발생했습니다.

배경 : 나는 Manning 사가 "SonarQube in Action"이라는 책을 읽었습니다. 자신 만의 플러그인을 개발하기위한 가이드가 적었습니다 (개발 과정에서 redmine 플러그인을 사용했습니다). 그것은 기본 프레임 워크를 만들기 위해 sonar-plugin-archetype을 사용하라고했습니다.

리팩토링 전 상황 : 나는 플러그인을 작성 했으므로 잘 작동합니다. 일부 리팩토링을 수행 할 때 문제가 발생했습니다. 내 트리 (ecplise 사용)의 src 폴더에있는 모든 패키지를 리팩토링하기 전에 "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> 

지금까지 모든 것이 정상적으로 작동했습니다. 이제 우리는 내 문제에 임합니다. 리팩토링 후

상황 : 내 회사로서 클래스와 패키지의 일부 명명 conevtions을 가지고는 내가 트리에서 패키지 이름 변경 "com.mycompany.sonar.plugins.myplugin"또한 각 클래스 내에서 패키지 decleration에 com.mycompany.sonar.plugins.myplugin "으로 변경하십시오. 그런 다음 sonar-packaging-maven-plugin의 classPath 옵션을 "com.mycompany.sonar.plugins.myplugin.myPlugin"으로 변경했습니다. 내가 한 말은 "조직"을 바꾸는 것뿐입니다. "com.mycompany."에 입력하십시오.

"컴파일"명령을 실행하면 모든 것이 효과가있었습니다. "package"를 사용하면 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"로 시작해야합니다)?

나를 도와이 긴 텍스트와 시도를 읽어 주셔서 감사합니다 :)

+0

새 POM 스 니펫을 제공 할 수 있습니까? – cowls

+0

정확히보고 싶은 게 있니? 나는 내 질문에 그것을 추가했다. (나는 이미 입력 실수가 없다고 확신했다.) – Krummy

답변

1

pluginClass은 플러그인의 진입 점입니다. 값은 기존 클래스 여야합니다. 귀하의 예제에서 나는 오타가 있다고 가정하고 com.mycompany.sonar.plugins.myplugin.MyPlugin (대문자 M)이어야합니다.

+0

아시다시피 : 실제의 경우이 클래스들은 여기에서 호출 된 것과 같지 않다. 하지만 내가 말했듯이 : pluginClass는 기존 클래스를 가리 킵니다. 나는 타이핑 실수 나 그와 같은 것이 없다는 것도 확실히했다. 패키지 경로와 Plugin 클래스가 둘 다 존재합니다. "대문자 M"개념은 failling의 이유가 아닙니다. (제 실제 프로젝트에서 클래스 이름이 대문자로 시작하는지 확인했습니다). – Krummy

+0

사실 sonar-packaging-m-p는 프로젝트 classpath에서 클래스를 검색하지 않습니다. 그것은 관련이 있는지 확인합니다.클래스 파일이 build dir에 있으므로 m-p가 실행될 때 $ {project.build.outputDirectory} /com/mycompany/sonar/plugins/myplugin/MyPlugin.class 파일이 있는지 확인해야합니다. –

+0

나는 그것을 점검했다. .. 그리고 당신은 옳다! 어떤 이유에서 .class 데이터는 다른 패키지 decleration을 사용하는 동안 생성되지 않고 주어진 패키지 declaration을 사용하는 동안 생성되지 않습니다. "컴파일"명령조차도 ...하지만 : 그건 내 질문의 일부가 아닙니다. 도와 주셔서 감사합니다 :) – Krummy

관련 문제