Maven: избегайте развертывания артефактов пакета проекта во время стандартного жизненного цикла сборки - PullRequest
5 голосов
/ 13 октября 2009

Можно ли избежать развертывания артефакта, созданного в соответствии с пакетом проекта, во время обработки 'deploy: deploy' ?

Я имею в виду следующее:

  • предположим, у нас есть 'pom.xml' для веб-приложения и определим тип упаковки как 'war' ;
  • мы хотим собрать либо '*. War' артефакт, либо '*. Zip' , который содержит наше приложение, а также контейнер сервлета;
  • мы хотим развернуть только этот '*. Zip' артефакт во время обработки 'deploy: deploy' ;

т.е. Я хочу иметь возможность запустить 'mvn deploy' и имеет следующие результаты:

  1. 'myapp.war' построен;
  2. 'myapp-standalone.zip' построен;
  3. 'myapp-standalone.zip' развернут в целевом удаленном репозитории (обратите внимание, что я не беспокоюсь, если 'myapp.war' установлен здесь в локальный репозиторий );

Я проверил документация 'war: war' и нашел параметр 'primaryArtifact' . Однако в нем упоминается только локальный репозиторий.

Я попробовал следующее POM, но оно все еще развертывает '*. War' или '*. Zip' в удаленном хранилище:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.mygroup</groupId>
    <artifactId>myapp</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>myapp</name>
    <url>http://maven.apache.org</url>

    <dependencies>
        <!-- dependencies go here -->
    </dependencies>

    <build>
        <plugins>
            <! -- plugins like 'compiler' etc -->

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <primaryArtifact>false</primaryArtifact>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <executions>
                    <execution>
                        <id>myapp-standalone</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                        <configuration>
                            <descriptors>
                                <descriptor>src/main/assembly/standalone.xml</descriptor>
                            </descriptors>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <distributionManagement>
        <repository>
            <-- target repository information -->
        </repository>
        <snapshotRepository>
            <-- target repository information -->
        </snapshotRepository>
    </distributionManagement>
</project>

Кажется, что я могу получить желаемое поведение, объявив упаковку проекта как 'pom' и вручную сконфигурировав все моджо, подразумеваемые упаковкой 'war' ( 'resources: resources ', ' компилятор: компилировать ', ' resources: testResources ', ' компилятор: testCompile ', ' surefire: test ', 'war: war' , 'install: install' , 'deploy: deploy' ). Однако это сделало бы POM довольно многословным, и я бы хотел этого избежать.

Насколько я понимаю, в Maven всегда есть артефакт, подразумеваемый типом упаковки проекта, как один из артефактов проекта. Но неясно, что пользователь Maven должен делать, если он хочет получить артефакт, который не соответствует ни одному из типов упаковки по умолчанию (например, одиночный '*. Zip' архив).

Есть мысли?

С уважением, Денис

1 Ответ

8 голосов
/ 13 октября 2009

Согласно документации Maven Deploy :

deploy: deploy используется для автоматической установки артефакта, его pom и прикрепленных артефактов, созданных конкретным проектом. [...]

Так что я не думаю, что можно предотвратить развертывание вашей войны "как есть".

Однако, чтобы получить желаемый эффект, вы можете добавить в свою сборку определенный модуль, который будет отвечать за создание сборки (сборка будет зависеть от военного модуля) и настроить плагин развертывания в военном модуле на пропустить развертывание следующим образом:

         <plugin>
           <artifactId>maven-deploy-plugin</artifactId>
           <version>X.Y</version>
           <configuration>
             <skip>true</skip>
           </configuration>
         </plugin>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...