web-dev-qa-db-ja.com

Mavenは追加のjarファイルをデプロイします

特定の方法で(jarファイルとしてではなく)ビルドおよびデプロイされているアーティファクトがあります。デプロイメントの過程で、warファイルが作成されます。

アーティファクトがjarファイルとして別の場所にデプロイされるようにpomを構成するにはどうすればよいですか?

22
Joshua Swink

Maven deployは、アーティファクトをアプリケーションサーバーではなくMavenリポジトリにデプロイすることを意味します。

次のように追加の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>
25
MariuszS

この ブログ投稿 とそのコメントに答えがあります。

これらの3つのプラグイン構成により、戦争と並行して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>
23
yincrash

「mavenの方法」は、src/main/Javaを別のモジュールに分割し、warファイルをそれに依存させることです。

そのアプローチに完全に抵抗する場合は、プロファイルを使用してpackaging要素の内容を変更できる可能性があります。それが可能かどうかはわかりませんが。

5

それらを分離することは正しい方法です。 Mavenに同じモジュールで戦争と瓶を生成させることは可能ですが、将来的に問題が発生します。

3
Brian Fox

Pomファイルの依存関係にアーティファクトの対応する依存関係を追加する必要があります。

例:

<dependency>
        <groupId>org.Apache.myfaces.core</groupId>
        <artifactId>myfaces-api</artifactId>
        <version>1.2.2</version>
        <scope>compile</scope>
</dependency>
2
Warrior

これを解決する1つの方法は、モジュールにjarをビルドさせてから、Assemblyプラグインを使用して、そのwarのWEB-INF/libにあるjarを使用してwarファイルをビルドすることです。これには強くお勧めします。 jarプロジェクトとwarプロジェクトがあり、親プロジェクトが両方のモジュールを構築している方がよいでしょう。

0
sal