Создание проекта на основе maven2 без webapp с дополнительными несущественными файлами и пакетными файлами - PullRequest
2 голосов
/ 30 июля 2009

Я только начинаю понимать настройку maven2 при переносе через мой простой проект. Я пробежал пример командной строки пакета на веб-сайте Sonatype , но меня немного смущает, как я могу расширить и изменить упаковку этого проекта. Я пытался найти больше информации на эту тему, но мне кажется, что я либо думаю о проблеме неправильно, либо неправильно формулирую результаты поиска.

По сути, я хочу создать проект, который будет представлять собой zip-файл из всех jar-зависимостей, самого jar-файла, пакетных сценариев для его запуска для удобства и, возможно, других различных файлов для приложения (например, файлов свойств или чего-то еще). Тем не менее, я не хочу, чтобы все это было в банке. Я хотел бы просто иметь сжатую архивную сборку проекта с каталогом lib всех jar-файлов, корневым каталогом, содержащим файлы свойств и пакетные сценарии и, возможно, подпапки для хранения дополнительных ненужных файлов. Вид как:

  • sample-proj.zip:
    • easy.bat
    • props.ini
    • Lib
      • dependent1.jar
      • dependent2.jar
      • main.jar
    • sub_dir
      • someextrafile.txt

Как правильно построить такой проект с помощью maven2? Нужно ли создавать родительский проект, который строит zip и включает в себя подпроект в качестве модуля? Это был бы простой проект, который не должен быть мультимодульным ...

Ответы [ 2 ]

6 голосов
/ 30 июля 2009

Опираясь на ответ Мэтта Б. Вот несколько примеров того, как использовать упомянутые плагины. Обратите внимание, что выполнение связано с этапом тестирования интеграции, чтобы убедиться, что файл jar был создан перед попыткой его упаковать.

appassembler-maven-plugin сгенерирует пакетные файлы / оболочки, загрузит зависимости (в этом примере в каталог lib) и поместит все содержимое в target / appassembler

  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>appassembler-maven-plugin</artifactId>
    <version>1.0</version>
    <executions>
      <execution>
        <id>assemble-standalone</id>
        <phase>integration-test</phase>
        <goals>
          <goal>assemble</goal>
          <!--if you only want to create the repo and skip script generation, 
             use this goal instead-->
          <!--goal>create-repository</goal-->
        </goals>
        <configuration>
          <programs>
            <program>
              <mainClass>name.seller.rich.Foo</mainClass>
              <name>foo</name>
            </program>
          </programs>
          <platforms>
            <platform>windows</platform>
            <platform>unix</platform>
          </platforms>
          <repositoryLayout>flat</repositoryLayout>
          <repositoryName>lib</repositoryName>
        </configuration>
      </execution>
    </executions>
  </plugin>

Подключаемый модуль можно использовать для упаковки вывода appassembler в zip-архив:

<profiles>
  <profile>
    <id>archive</id>
    <build>
      <plugins>
        <plugin>
          <artifactId>maven-assembly-plugin</artifactId>
          <version>2.2-beta-2</version>
          <executions>
            <execution>
              <phase>integration-test</phase>
              <goals>
                <goal>single</goal>
              </goals>
              <configuration>
                <descriptors>
                  <descriptor>src/main/assembly/archive.xml</descriptor>
                </descriptors>
              </configuration>
            </execution>
          </executions>
        </plugin>    
      </plugins>
    </build>
  </profile>
</profiles>

И дескриптор сборки выглядит примерно так:

<assembly>
  <id>archive</id>
  <formats>
    <format>zip</format>
  </formats>
  <fileSets>
    <fileSet>
     <directory>${project.build.directory}/appassembler</directory>
     <outputDirectory>/</outputDirectory>
    </fileSet>
  </fileSets>
  <!-- add any other filesets to include docs, readmes, licences etc here -->
</assembly>
2 голосов
/ 30 июля 2009

Плагин appassembler делает именно то, что вы описываете: создает сценарии оболочки и упаковывает зависимости.

Однако я не верю, что он упаковывает их в zip / tar.gz / etc (appassembler просто помещает их в структуру папок в target/appassembler. Но вы можете использовать плагин maven-assembly в сочетании с appassembler, чтобы просто упаковать этот вывод - maven-assembly отлично справляется с созданием zip / jar / tar.gz / bzip2 / что угодно, и вы можете полностью контролировать, что входит в файл, с помощью XML-дескриптора .

...