2014-10-26 3 views
0

Мой проект может автоматически генерировать некоторые дополнительные файлы справки из исходного кода.Maven и JavaDoc: установить дополнительные (сгенерированные) файлы

Как я могу установить эти файлы в сгенерированный пакет JavaDoc?

Я не мог fingure, как иметь Maven:

  1. пробегают некоторый класс для создания дополнительной документации, например, компилировать и запускать src/main/java/mypackage/ListOptions.java aka mypackage.ListOptions, чтобы получить список всех доступных опций/модулей/примеров/и т. д. ,

  2. установить выходные файлы (я только мог получить Maven для установки файлов из src/main/javadoc/resources в site/apidocs/resources вложенной, но я хочу эту документацию, чтобы жить в папку верхнего уровня site/apidocs, точнее я не забочусь о site части вообще говоря, но о том, чтобы иметь полную документацию в mypackage-0.1.0-SNAPSHOT-javadoc.jar, включая вспомогательную информацию, не связанную с Javadoc, связанную с javadoc).

Минимальный пример - плагин конфигурации для мавена:

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-javadoc-plugin</artifactId> 
      <version>2.9.1</version> 
      <executions> 
       <execution> 
        <id>attach-javadocs</id> 
        <goals> 
         <goal>jar</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <docfilessubdirs>true</docfilessubdirs> 
      </configuration> 
     </plugin> 

Каталог раскладка:

./pom.xml 
./src/main/java/foobar/GenerateNonstatic.java 
./src/main/javadoc/staticfile.js 
./src/main/javadoc/resources/insubfolder.png 

mvn package производит: в ./target/apidocs Javadoc и ./target/foobar-0.0.1-SNAPSHOT-javadoc.jar. Файл target/apidocs/resources/insubfolder.png заканчивается в папке target/apidocs/resources.jar), но staticfile.js не установлен.

Как запустить GenerateNonstatic.java, чтобы выход, включенный в javadoc .jar, не ясен для меня. Я не вижу крюк, чтобы иметь Exec: EXEC запустить его после Javadoc и перед тем./target/foobar-0.0.1-SNAPSHOT-javadoc.jar построен ...

+1

Пожалуйста, покажите ваш файл pom.xml и структуру директорий, показывающий, где класс поколения дока является и желаемым местом вывода – 333kenshin

+0

класс поколения дока в источнике Java, 'SRC/главный/java' (. которые вы не увидите n '' pom.xml', потому что мне непонятно, как настроить задачу 'exec', чтобы она попала в javadoc ...), и желаемое расположение вывода - это * any *' package' и 'javadoc' магия использует для создания пакета '...- javadoc.jar'. –

+0

@ 333kenshin Я добавил минимальный пример, но я не вижу, как это поможет. –

ответ

0

Длинный рассказ, короткий ответ. У них есть свои недостатки: javadoc:javadoc и javadoc:jar mojos. Первое предназначено для создания javadoc для отчетности; последний построит javadoc (в другой каталог) и создаст пакет jar.

Некоторые из предложенных ответов не помогли из-за этого - они будут выполнять javadoc дважды.

Но я заметил, что javadoc не заботит, существует ли папка или содержит файлы.

Так что мое решение прост: сгенерируйте требуемые дополнительные файлы в prepare-package, а обычная задача javadoc:jar добавляет регулярный javadoc и pacakges это красиво.

Это будет работать до тех пор, пока вы не намерены изменять файлы, созданные Javadoc (который я, к счастью, не -. Я только добавить дополнительную документацию

Полученный pom.xml подобен это:

<plugins> 
    <!-- copy additional javadoc resources --> 
    <plugin> 
     <artifactId>maven-resources-plugin</artifactId> 
     <version>2.7</version> 
     <executions> 
     <execution> 
      <id>copy-resources</id> 
      <phase>prepare-package</phase> 
      <goals> 
       <goal>copy-resources</goal> 
      </goals> 
      <configuration> 
     <outputDirectory>${project.build.directory}/apidocs</outputDirectory> 
      <resources> 
      <resource> 
       <directory>${basedir}/src/main/javadoc</directory> 
       <excludes> 
       <!-- overview.html is integrated by javadoc --> 
       <exclude>${basedir}/src/main/javadoc/overview.html</exclude> 
       </excludes> 
      </resource> 
      </resources> 
      </configuration> 
     </execution> 
     </executions> 
    </plugin> 
    <!-- Generate additional files for javadoc --> 
    <plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>exec-maven-plugin</artifactId> 
     <version>1.3.2</version> 
     <executions> 
      <execution> 
       <id>generate-extra-javadoc</id> 
       <phase>prepare-package</phase> 
       <goals> 
         <!-- java is okay, but you only can have one --> 
        <goal>exec</goal> 
       </goals> 
       <configuration>...</configuration> 
      </execution> 
     </executions> 
    </plugin> 
    <!-- Build JavaDoc --> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-javadoc-plugin</artifactId> 
     <version>2.10.1</version> 
     <executions> 
      <execution> 
       <id>attach-javadocs</id> 
       <phase>package</phase> 
       <goals> 
        <goal>jar</goal> 
       </goals> 
      </execution> 
     </executions> 
    </plugin> 
0

Чтобы ответить на ваш первый вопрос: Выполнить команду командной строки с Exec-Maven-плагин или использовать Maven-Ant-Plugin и встраивать собственные задачи.

0

Eric,

Ваш пример действительно полезен. Пожалуйста, старайтесь всегда включать конкретные примеры как можно больше, задавая вопрос.

Самый простой способ - написать свой собственный Alternate Javadoc tool и передать его в Maven через тег <javadocExecutable>. Этот пример исходит из ссылки, приведенной выше:

<project> 
    ... 
    <reporting> (or <build>) 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-javadoc-plugin</artifactId> 
     <version>2.10.1</version> 
     <configuration> 
      <javadocExecutable>C:\jdk1.6.0\bin\javadoc.exe</javadocExecutable> 
      ... 
     </configuration> 
     </plugin> 
     ... 
    </plugins> 
    </reporting> (or </build>) 
    ... 
</project> 

Надеюсь, что это поможет.

1

Эрик,

Если вам неудобно изменений JavaDoc исполняемого, другой вариант заключается в распадаться ваш JavaDoc вызова в 2 отдельных шаги (JavaDoc и банка) и сделать свой вызов между ними манипулированием Maven построить жизненный цикл с помощью <phase> тег:

  • фаза: порождающие-источники => Maven-Javadoc-плагин: Javadoc
  • фаза: компилировать => EXEC-Maven-плагин: Java
  • фаза: пакет => Maven-javadoc- плагин: баночка

примечание: использование Exec: Java, не EXEC: EXEC для запуска Java-классы

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-javadoc-plugin</artifactId> 
     <version>2.9.1</version> 
     <executions> 
      <execution> 
       <id>generate-javadocs</id> 
       <phase>generate-sources</phase> 
       <goals> 
        <goal>javadoc</goal> 
       </goals> 
      </execution> 
      <execution> 
       <id>attach-javadocs</id> 
       <phase>package</phase> 
       <goals> 
        <goal>jar</goal> 
       </goals> 
      </execution> 
     </executions> 
    </plugin> 

    <plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>exec-maven-plugin</artifactId> 
     <version>1.3.2</version> 
     <executions> 
      <execution> 
       <id>generate-nonstatic-javadocs</id> 
       <phase>compile</phase> 
       <goals> 
        <goal>java</goal> 
       </goals> 
       <configuration> 
        <mainClass>foobar.GenerateNonstatic</mainClass> 
       </configuration> 
      </execution> 
     </executions> 
    </plugin> 
+0

Примечание: 'exec: java', по-видимому, не поддерживает несколько исполнений. Поскольку я запускаю два генератора, мне нужно было использовать 'exec: exec'. Большое спасибо за вашу помощь! –

+0

Пока не работает. Кажется, что первая цель будет запускать javadoc в папку отчетов. Второй будет запускать javadoc * снова *, в папку 'target/apidocs'. Я «взломал» это, установив каталог отчетов для первого запуска и используя '/ bin/true' как« исполняемый файл javadoc »для второго. Это вызывает предупреждение, но строительные работы. Но теперь я решил гораздо более простое решение. –

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