Maven Assembly Plugin - установить созданную сборку - PullRequest
12 голосов
/ 14 апреля 2010

У меня есть проект, который просто состоит из файлов. Я хочу упаковать эти файлы в zip и сохранить их в репозитории maven. У меня есть сборочный плагин, настроенный для сборки zip-файла, и эта часть работает нормально, но я не могу понять, как установить zip-файл?

Кроме того, если я хочу использовать эту сборку в другом артефакте, как бы я это сделал? Я собираюсь вызвать зависимость: распаковать, но в хранилище нет артефакта для распаковки.

Как я могу получить zip-файл в моем хранилище, чтобы я мог повторно использовать его в другом артефакте?

родительский пом

<build>
        <plugins>
            <plugin>
                <!--<groupId>org.apache.maven.plugins</groupId>-->
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.2-beta-5</version>
                <configuration>
                    <filters>
                        <filter></filter>
                    </filters>
                    <descriptors>
                        <descriptor>../packaging.xml</descriptor>
                    </descriptors>
                </configuration>
            </plugin>
        </plugins>
    </build>

Детский ПОМ

<parent>
    <groupId>com. ... .virtualHost</groupId>
    <artifactId>pom</artifactId>
    <version>0.0.1</version>
    <relativePath>../pom.xml</relativePath>
</parent>

<name>Virtual Host - ***</name>
<groupId>com. ... .virtualHost</groupId>
<artifactId>***</artifactId>
<version>0.0.1</version>
<packaging>pom</packaging>

Я отфильтровал имя. Это POM правильно? Я просто хочу объединить файлы для определенного виртуального хоста.

Спасибо

Walter

Ответы [ 3 ]

15 голосов
/ 14 апреля 2010

У меня есть сборочный плагин, настроенный для сборки zip-файла, и эта часть работает отлично, но я не могу понять, как установить zip-файл?

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

Обновление: С вашей текущей конфигурацией, я не думаю, что сборка создается как часть вашей сборки. Вам необходимо связать цель single с фазой жизненного цикла, обычно package:

  <plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.2-beta-5</version>
    <configuration>
      <descriptors>
        <descriptor>../packaging.xml</descriptor>
      </descriptors>
    </configuration>
    <executions>
      <execution>
        <id>make-assembly</id> <!-- this is used for inheritance merges -->
        <phase>package</phase> <!-- append to the packaging phase. -->
        <goals>
          <goal>single</goal> <!-- goals == mojos -->
        </goals>
      </execution>
    </executions>
  </plugin>

И теперь он должен быть правильно установлен / развернут.

Кроме того, если я хочу использовать эту сборку в другом артефакте, как бы я это сделал? Я собираюсь вызвать зависимость: распаковать, но в хранилище нет артефакта для распаковки.

Вы можете объявить зависимость от сборки (используя правильные classifier и type в вашем случае), но, поскольку зависимость разрешается через репозиторий, вам сначала нужно решить первый шаг. Затем объявите что-то вроде этого (где классификатор - это идентификатор сборки):

<dependency>
  <groupId>com. ... .virtualHost</groupId>
  <artifactId>***</artifactId>
  <version>0.0.1</version>
  <classifier>...</classifier>
  <type>zip</type>
</dependency>
1 голос
/ 14 апреля 2010

Я думаю, что сборки должны автоматически присоединяться к сборке, но если это не сработает, цель Maven Build Helper "attach-artifact" присоединяет указанный файл для установки в хранилище. , Я использовал этот плагин для установки файлов, созданных внешним процессом, таким как Ant или NSIS.

0 голосов
/ 14 апреля 2010

Я не знаю, может ли это быть полезным для вас, но поскольку JAR-файл - это, в основном, ZIP-файл плюс информация META-INF, вы можете создать свой проект в виде jar без источников и добавить xip-значения в src/main/resources без необходимости настройки плагинов.

Если вы хотите, чтобы ваш контент находился в другом месте, вы всегда можете сделать что-то вроде:

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mycompany.myzip</groupId>
  <artifactId>myzip-artifact-id</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>
  <build>
    <resources>
      <resource>
        <targetPath>.</targetPath>
        <filtering>false</filtering>
        <directory>${basedir}/zipcontent</directory>
        <includes>
          <include>**/*</include>
        </includes>
      </resource>
    </resources>
  </build>
</project>

Если вы хотите, чтобы ваш артефакт был установлен и был доступен в репозитории, вам потребуется настроить его для фазы развертывания:

http://maven.apache.org/plugins/maven-deploy-plugin/usage.html

...