Как создать сборку Maven, которая не распаковывает зависимости в свою папку? - PullRequest
3 голосов
/ 28 июня 2011

Я хочу создать автономный архив, включающий контейнер OSGi для запуска комплектов моего проекта. Цель состоит в том, чтобы иметь архив, который можно загрузить, распаковать и запустить сразу.

Я использую плагин сборки Maven для создания архива. С дескриптором сборки ниже и единственной зависимостью от Apache Karaf я получаю следующую структуру в моем архиве:

+-apache-karaf-2.2.1
  |
  +-bin
  +-demos
  ... etc ..

Я хочу удалить базовый каталог из распакованной зависимости, иметь свой собственный базовый каталог вверху и исключить некоторые из папок (например, demos), а затем добавить свои собственные пакеты и файлы конфигурации. Похоже, я не могу сделать все это с плагином сборки, есть ли другой плагин, который я могу использовать?

Вот мой дескриптор сборки:

<assembly>
  <id>dist-full</id>
  <formats>
    <format>tar.gz</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <dependencySets>
    <dependencySet>
      <unpack>true</unpack>
      <useProjectArtifact>false</useProjectArtifact>
      <useTransitiveDependencies>false</useTransitiveDependencies>
    </dependencySet>
  </dependencySets>
</assembly>

Обратите внимание, что includeBaseDirectory установлен только в false, потому что я хочу по крайней мере правильно указать количество уровней, тогда мне просто нужно переименовать объект после распаковки. Было бы лучше сохранить базовый каталог и вместо этого избавиться от основанного на зависимости.

1 Ответ

2 голосов
/ 28 июня 2011

Используйте maven-dependency-plugin, чтобы распаковать зависимости, а затем используйте fileSets в дескрипторе сборки. Вот так:

pom.xml:

<project>
<!-- ... -->

<dependencies>
  <dependency>
    <groupId>org.apache.karaf</groupId>
    <artifactId>apache-karaf</artifactId>
    <version>2.2.1</version>
    <type>tar.gz</type>
  </dependency>
</dependencies>

<!-- ... -->

<build>
  <plugins>
    <plugin>
      <artifactId>maven-dependency-plugin</artifactId>
      <executions>
        <execution>
          <id>prepare-runtime</id>
          <goals>
            <goal>unpack-dependencies</goal>
          </goals>
          <configuration>
            <excludeTransitive>true</excludeTransitive>
          </configuration>
        </execution>
      </executions>
    </plugin>
    <plugin>
      <artifactId>maven-assembly-plugin</artifactId>
      <executions>
        <execution>
          <id>distribution-package</id>
          <phase>package</phase>
          <goals>
            <goal>single</goal>
          </goals>
          <configuration>
            <descriptor>assembly.xml</descriptor>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

<!-- ... -->
</project>

assembly.xml:

<assembly>
  <id>dist-full</id>
  <formats>
    <format>tar.gz</format>
  </formats>
  <baseDirectory>${groupId}.${artifactId}-${version}</baseDirectory>
  <fileSets>
    <fileSet>
      <directory>target/dependency/apache-karaf-2.2.1</directory>
      <outputDirectory />
      <includes>
        <include>bin/**</include>
        <include>lib/**</include>
        <include>etc/**</include>
        <include>deploy/**</include>
        <include>system/**</include>
      </includes>
    </fileSet>
  </fileSets>
</assembly>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...