2013-02-20 5 views
1

Я пытаюсь скомпилировать весь комментарий javadoc класса (предпочтительно, подклассы библиотеки класса WebPage) во время компиляции в файл .properties в формате classname=comment.Как я могу скомпилировать и запустить свой собственный класс Doclet в моем проекте?

До сих пор у меня есть:

  • создал класс доклет SiteMapDoclet
    • класс определяется для сканирования всех Javadocs в проекте и сбросить их к .properties файл
  • Добавлено необходимые конфиги для моего pom.xml для его работы.

Версии: Java 1.6.0.21, Maven 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.

раздел отчетности моего 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?

Кроме того, я хотел бы, чтобы мой файл SiteMap работал как часть обычного процесса сборки, после compile, но до package.

Я пробовал определить это в build, но javadoc не создается и я не вижу выхода из моего документа Doclet.

<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 «ы. Я удалил раздел <reporting> моего pom.xml и теперь у него процесс не работает во время сборки. Я добавил <goals> и скопировал раздел <configuration> с <reporting>.

Он все еще бросает 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 Отличный совет, который я был в состоянии получить его, наконец, запустить.
Это «работает». Он чувствует себя не так, и мне бы хотелось увидеть лучший метод.

Вот что я сделал:

  • Defined плагин в разделе построения с JavaDoc цели.
    • удостоверились tools.jar и rt.jar находятся в <bootclasspath>
    • определил <docletPath>, как \;.;${project.build.outputDirectory};
      • \;.; необходимы, потому что специалист не добавляет правильно
      • также был явно добавить путь к некоторым из пакетов здесь, чтобы предотвратить наследование конфликтующих версий. (В частности из Log4J)
    • определены <docletArtifacts> с пакетами для классов метание 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

Вы можете попробовать поставить <additionalDependencies> в качестве плагина dependendencies:

<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 package' :) Мне просто пришлось копировать/вставлять '' из отчетов для сборки. – Raystorm

Смежные вопросы