Maven развернуть дополнительный файл JAR - PullRequest
22 голосов
/ 16 апреля 2009

У меня есть артефакт, который создается и разворачивается особым образом (не в виде файла JAR). В ходе развертывания создается файл войны.

Как настроить pom таким образом, чтобы артефакт также был развернут в виде файла JAR в другом месте?

Ответы [ 6 ]

25 голосов
/ 20 марта 2013

Maven deploy означает развертывание артефакта в Maven Repository , а не на сервере приложений.

Настройте дополнительный JAR-артефакт следующим образом:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <executions>
        <execution>
            <id>make-a-jar</id>
            <phase>compile</phase>
            <goals>
                <goal>jar</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Прикрепите этот новый артефакт к вашему проекту:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.7</version>
    <executions>
        <execution>
            <id>attach-artifacts</id>
            <phase>package</phase>
            <goals>
                <goal>attach-artifact</goal>
            </goals>
            <configuration>
                <artifacts>
                    <artifact>
                        <file>some file</file>
                        <type>jar</type>                           
                    </artifact>
                </artifacts>
            </configuration>
        </execution>
    </executions>
</plugin>
22 голосов
/ 10 июня 2010

Это сообщение в блоге и его комментарии имеют ответ.

Эти три конфигурации плагинов позволят вам создать / установить / развернуть версию jar вместе с войной.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <executions>
        <execution>
            <id>make-a-jar</id>
            <phase>compile</phase>
            <goals>
                <goal>jar</goal>
            </goals>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-install-plugin</artifactId>
    <executions>
        <execution>
            <phase>install</phase>
            <goals>
                <goal>install-file</goal>
            </goals>
            <configuration>
                <packaging>jar</packaging>
                <artifactId>${project.artifactId}</artifactId>
                <groupId>${project.groupId}</groupId>
                <version>${project.version}</version>
                <file>
                    ${project.build.directory}/${project.artifactId}-${project.version}.jar
                </file>
            </configuration>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-deploy-plugin</artifactId>
    <executions>
        <execution>
            <phase>deploy</phase>
            <goals>
                <goal>deploy-file</goal>
            </goals>
            <configuration>
                <packaging>jar</packaging>
                <generatePom>true</generatePom>
                <url>${project.distributionManagement.repository.url}</url>
                <artifactId>${project.artifactId}</artifactId>
                <groupId>${project.groupId}</groupId>
                <version>${project.version}</version>
                <file>${project.build.directory}/${project.artifactId}-${project.version}.jar</file>
            </configuration>
        </execution>
    </executions>
</plugin>
5 голосов
/ 16 апреля 2009

«Maven way» - это разделение src/main/java на отдельный модуль, и от этого зависит файл войны.

Если вы абсолютно устойчивы к этому подходу, вы можете использовать профиль для изменения содержимого элемента packaging. Хотя я не уверен, возможно ли это.

3 голосов
/ 26 апреля 2009

Разделение их - верный путь. Заставить maven производить войну и банку в одном и том же модуле возможно, но у вас возникнут проблемы в будущем.

2 голосов
/ 16 апреля 2009

Вы должны добавить соответствующую зависимость артефакта в зависимости файла pom.

Ex:

<dependency>
        <groupId>org.apache.myfaces.core</groupId>
        <artifactId>myfaces-api</artifactId>
        <version>1.2.2</version>
        <scope>compile</scope>
</dependency>
0 голосов
/ 26 сентября 2009

Один из способов решить эту проблему - заставить модуль собрать jar, а затем использовать плагин сборки для создания файла войны с помощью jar в WEB-INF / lib этой войны. Я настоятельно рекомендую против этого. Вам лучше иметь jar-проект и war-проект, в котором родительский проект собирает оба модуля.

...