2013-02-20 6 views
1

컴파일 할 때 모든 클래스 javadoc 주석 (선호 라이브러리 웹 페이지 클래스의 하위 클래스)을 classname=comment 형식의 .properties 파일로 덤프하려고합니다.프로젝트에서 내 Custom Doclet 클래스를 컴파일하고 실행하려면 어떻게해야합니까?

지금까지 내가 가진 :

  • 만들어 도크 렛 클래스는 SiteMapDoclet 클래스가 .properties 파일에 프로젝트의 모든의 javadoc를 스캔하고 덤프 정의
    • 파일
  • 추가 내 pom.xml에 필요한 configs가 작동하도록 설정합니다.

버전 : 자바 1.6.0.21, 메이븐 2.2.1

문제 :
mvn site 반환 :

Embedded error: Error rendering Maven report: 
Exit code: 1 - java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory 
    at us.ak.state.revenue.cssd.Personnel.utils.SiteMapDoclet.<clinit>(SiteMapDoclet.java:27) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 

나는 그들이 비록 AdditionalDependencies로 항아리를 설정하려 내 프로젝트의 정상적인 의존성. 또한 bootclasspath의 일부로 필요한 클래스를 기대하는 jar에 경로를 추가하려고 시도했습니다.

내 pom.xml 파일의보고 섹션은 다음과 같습니다

<reporting> 
    <plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-javadoc-plugin</artifactId> 
     <version>2.9</version> 
     <reportSets> 
     <reportSet> 
      <id>html</id> 
      <reports> 
      <report>javadoc</report> 
      </reports> 
     </reportSet> 
     <reportSet> 
      <id>siteMap</id> 
      <configuration> 
      <doclet> 
       us.ak.state.revenue.cssd.Personnel.utils.SiteMapDoclet 
      </doclet> 
      <docletPath>${project.build.outputDirectory}</docletPath> 
      <destDir>SiteMap</destDir> 

      <author>false</author> 
      <useStandardDocletOptions>false</useStandardDocletOptions> 
      <!-- there has got to be a better way to do this! --> 
      <!-- how can I fix the CSSD-Web - Base to use a proper manifest file? --> 
      <bootclasspath> 
       ${bootClassPath}; 
       ${env.CLASSPATH}; 
       ${m2Repository}/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar; 
       ${m2Repository}/org/apache/wicket/wicket-core/${wicket.version}/wicket-core-${wicket.version}.jar; 
       ${m2Repository}/us/ak/state/revenue/cssd/CSSD-Web/${CSSDWebBase.version}/CSSD-Web-${CSSDWebBase.version}.jar 
      </bootclasspath> 
      <additionalDependencies> 
       <additionalDependency> 
       <groupId>us.ak.state.revenue.cssd</groupId> 
       <artifactId>CSSD-Web</artifactId> 
       <version>${CSSDWebBase.version}</version> 
       </additionalDependency> 
       <additionalDependency> 
       <groupId>org.apache.wicket</groupId> 
       <artifactId>wicket-core</artifactId> 
       <version>${wicket.version}</version> 
       </additionalDependency> 
       <additionalDependency> 
       <groupId>log4j</groupId> 
       <artifactId>log4j</artifactId> 
       <version>1.2.16</version> 
       </additionalDependency> 
       <additionalDependency> 
       <groupId>commons-logging</groupId> 
       <artifactId>commons-logging</artifactId> 
       <version>1.1.1</version> 
       </additionalDependency> 
      </additionalDependencies> 

      <name>SiteMapDoclet</name> 
      <description>Page Descriptions for SiteMap generation</description> 
      </configuration> 
      <reports> 
      <report>javadoc</report> 
      </reports> 
     </reportSet> 
     </reportSets> 
    </plugin> 
    </plugins> 
</reporting> 

가 참고 :
${m2Repository}
${env.USERPROFILE}/.m2/repository
${bootClassPath}로 정의, 높은 파일을 백업 속성으로 정의가 정의 파일보다 높은 속성 인
${env.JRE_6_HOME}\lib\rt.jar;${env.JAVA_HOME}\lib\tools.jar;

로 정의됩니다.

NoClassDefFoundError을 어떻게 해결할 수 있습니까?

compile 다음에 package 다음에 정상 빌드 프로세스의 일부로 사이트 맵 파일을 실행하고 싶습니다.

build에 이것을 정의 해 보았지만 javadoc이 생성되지 않아 내 도큐멘트에서 로깅 출력이 표시되지 않습니다.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-javadoc-plugin</artifactId> 
    <version>2.9</version> 
    <executions> 
     <execution> 
     <id>build-siteMap-Descriptions</id> 
     <phase>process-classes</phase> 
     </execution> 
    </executions> 
    </plugin> 

UPDATE : @ ben75의 제안에
감사합니다. 내 pom.xml<reporting> 섹션을 삭제했으며 빌드하는 동안 프로세스가 실패했습니다. 나는 <goals>을 추가하고 <reporting>에서 <configuration> 섹션을 복사했습니다.

여전히 NoClassDefFoundError을 던지고 있지만, 내가 원하는 곳에서 빌드하고 있습니다.추가 시도 :

<includeDependencySources>true</includeDependencySources> 
<dependencySourceIncludes> 
    <dependencySourceInclude>org.apache.wicket:wicket-core:*</dependencySourceInclude> 
    <dependencySourceInclude>org.apache.commons.logging:*</dependencySourceInclude> 
    <dependencySourceInclude>us.ak.state.revenue.cssd:CSSD-Web:*</dependencySourceInclude> 
</dependencySourceIncludes> 

구성 섹션에는 있지만 작동하지 않습니다.

답변

0

건물을 @에 우수한 조언 ben75s 나는 마지막으로 실행 얻을 수있었습니다.
이것은 "작동합니다". 잘못 생각하고 더 나은 방법을보고 싶습니다.

는 여기에 내가했던 일이야 :

  • 는 javadoc의 목표와 빌드 섹션에서 플러그인을 정의.
    • <bootclasspath>
    • 에 정의되어 있는지 tools.jar가와의 rt.jar을 만든 <docletPath> 받는다는는 추가하지 않기 때문에 \;.;이 필요
      • \;.;${project.build.outputDirectory};로 제대로
      • 명시 적 경로를 추가했다 충돌하는 버전의 상속을 방지하기 위해 여기에 패키지 중 일부가 있습니다.
    • 가 던지는 클래스의 패키지와 <docletArtifacts> 정의 (구체적으로는 Log4J에) NoClassDefFoundError

내 플러그인은 이제 다음과 같습니다 : 난 여전히 받고 있어요

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-javadoc-plugin</artifactId> 
    <version>2.9</version> 
    <executions> 
     <execution> 
     <id>build-siteMap-Descriptions</id> 
     <phase>process-classes</phase> 
     <goals> 
      <!--<goal>aggregate</goal>--> 
      <goal>javadoc</goal> 
     </goals> 
     <configuration> 
      <doclet> 
      us.ak.state.revenue.cssd.Personnel.utils.SiteMapDoclet 
      </doclet> 
      <!-- the initial '\;.;' is required 
       because maven doesn't separate the path statements properly 

       The 5 packages are necessary 
       because otherwise slf4j complains about multiple bindings 
      --> 
      <docletPath> 
      \;.;${project.build.outputDirectory}; 
      ${m2Repository}/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar; 
      ${m2Repository}/log4j/log4j/1.2.16/log4j-1.2.16.jar; 
      ${m2Repository}/log4j/apache-log4j-extras/1.1/apache-log4j-extras-1.1.jar; 
      ${m2Repository}/us/ak/state/revenue/cssd/CSSD-Web/${CSSDWebBase.version}/CSSD-Web-${CSSDWebBase.version}.jar; 
      ${m2Repository}/org/apache/wicket/wicket-core/${wicket.version}/wicket-core-${wicket.version}.jar; 
      ${m2Repository}/org/apache/wicket/wicket-util/${wicket.version}/wicket-util-${wicket.version}.jar; 
      </docletPath> 
      <docletArtifacts> 
      <!-- 
      <docletArtifact> 
       <groupId>commons-logging</groupId> 
       <artifactId>commons-logging</artifactId> 
       <version>1.1.1</version> 
      </docletArtifact> 
      --> 
      <docletArtifact> 
       <groupId>org.slf4j</groupId> 
       <artifactId>slf4j-log4j12</artifactId> 
       <version>1.6.2</version> 
      </docletArtifact> 
      <!-- how do I fix the download errors? --> 
      <!-- 
      <docletArtifact> 
       <groupId>org.slf4j</groupId> 
       <artifactId>slf4j-api</artifactId> 
       <version>1.6.2</version> 
      </docletArtifact> 
      --> 
      <!-- 
      <artifact> 
       <groupId>log4j</groupId> 
       <artifactId>log4j</artifactId> 
       <version>1.2.16</version> 
      </artifact> 
      --> 
      <!-- 
      <docletArtifact> 
       <groupId>log4j</groupId> 
       <artifactId>apache-log4j-extras</artifactId> 
       <version>1.1</version> 
      </docletArtifact> 
      <docletArtifact> 
       <groupId>us.ak.state.revenue.cssd</groupId> 
       <artifactId>CSSD-Web</artifactId> 
       <version>${CSSDWebBase.version}</version> 
      </docletArtifact> 
      <docletArtifact> 
       <groupId>org.apache.wicket</groupId> 
       <artifactId>wicket-core</artifactId> 
       <version>${wicket.version}</version> 
      </docletArtifact> 
      --> 
      </docletArtifacts> 

      <!-- the initial '\;.;' is required 
       because maven doesn't separate the path statements properly --> 
      <bootclasspath> 
      \;.; 
      ${bootClassPath}; 
      ${env.CLASSPATH}; 
      </bootclasspath> 

      <destDir>SiteMap</destDir> 

      <author>false</author> 
      <!-- don't print the packages/classes it's running on --> 
      <quiet>true</quiet> 
      <debug>true</debug> <!-- save options --> 
      <useStandardDocletOptions>false</useStandardDocletOptions> 

      <name>SiteMapDoclet</name> 
      <description>Page Descriptions for SiteMap generation</description> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 
1
당신은 플러그인 dependendencies로 <additionalDependencies>를 넣어 시도 할 수 있습니다

:

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-javadoc-plugin</artifactId> 
     <version>2.9</version> 
     <dependencies> 
     <dependency> 
      <groupId>us.ak.state.revenue.cssd</groupId> 
      <artifactId>CSSD-Web</artifactId> 
      <version>${CSSDWebBase.version}</version> 
     </dependency> 
     ... 

일반 빌드 프로세스에 javadoc의 플러그인을 연결하려면, 당신은 단지 목표를 지정할 필요가 있다고 생각 바람직 위상 패키지 준비를 부착 (당신은 단순히 테스트 단계를 실행할 때 그래서 javadoc의 생성되지 않음) :

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-javadoc-plugin</artifactId> 
      <version>2.9</version> 
      <executions> 
       <execution> 
        <id>attach-javadoc</id> 
        <phase>prepare-package</phase> 
        <goals> 
         <goal>jar</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 
+0

'NoNoClassDefFoundError'하지만, 이제는'mvn 꾸러미'에 담았습니다 :) 단지''을 복사하여보고해야합니다. – Raystorm