web-dev-qa-db-ja.com

Maven:アーティファクトを特定のディレクトリにコピーする方法は?

「インストール」の目標は、成果物をターゲットディレクトリとローカルリポジトリにコピーします。

Mavenにそれをコピーするように指示するにはどうすればよいですかまた、指定されたディレクトリに(JBossのデプロイディレクトリなど)。

24
Mr.Eddart

Maven-dependency-pluginのゴール copy はあなたが望むことをします example を見てください。

ただし、ターゲットディレクトリ(正確には${project.build.directory})の外に何かをコピーすることはお勧めできません。特に、そのようなアクションがビルドフェーズにアタッチされている場合は、ビルドの予期しない副作用が発生することがあります。再現性も失われます。

@Andreas_Dが指摘するように、JBossのデプロイメント目的には、より良い代替手段があります。他のアプリサーバーへのデプロイについても同様です。

17
Petr Kozelka

http://maven.Apache.org/plugins/maven-dependency-plugin/examples/copying-artifacts.html によると、ビルドしたアーティファクトを特定のディレクトリにコピーできます。

<project>
    [...]
    <build>
      <plugins>
        <plugin>
          <groupId>org.Apache.maven.plugins</groupId>
          <artifactId>maven-dependency-plugin</artifactId>
          <version>2.8</version>
          <executions>
            <execution>
              <id>copy-installed</id>
              <phase>install</phase>
              <goals>
                <goal>copy</goal>
              </goals>
              <configuration>
                <artifactItems>
                  <artifactItem>
                    <groupId>${project.groupId}</groupId>
                    <artifactId>${project.artifactId}</artifactId>
                    <version>${project.version}</version>
                    <type>${project.packaging}</type>
                  </artifactItem>
                </artifactItems>
                <outputDirectory>some-other-place</outputDirectory>
              </configuration>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </build>
    [...]
  </project>
11
Jörg

ファイルをWebサーバー(ローカルまたは遠隔)にコピーする場合は、Mavenアップロードプラグインを使用できます。

                <plugin>
                    <groupId>com.atlassian.maven.plugins</groupId>
                    <artifactId>maven-upload-plugin</artifactId>
                    <version>1.1</version>
                    <configuration>
                        <resourceSrc>
                            ${project.build.directory}/${project.build.finalName}.${project.packaging}
                        </resourceSrc>
                        <resourceDest>${jboss.deployDir}</resourceDest>
                        <serverId>${jboss.Host}</serverId>
                        <url>${jboss.deployUrl}</url>
                    </configuration>
                </plugin>

そして、スマートな方法でパラメーターを構成するために、私はmavenプロファイルを使用します:

<profiles>
    <!-- local deployment -->
    <profile>
        <id>developpement</id>
        <properties>
            <jboss.Host>localhost</jboss.Host>
            <jboss.deployDir>appli/jboss-4.0.4.GA/server/default/deploy/</jboss.deployDir>
            <jboss.deployUrl>file://C:/</jboss.deployUrl>
        </properties>
    </profile>
    <!-- distant deployment -->
    <profile>
        <id>validation</id>
        <properties>
            <jboss.Host>ENV_val</jboss.Host>
            <jboss.deployDir>/home/envval/jboss/server/default/deploy/</jboss.deployDir>
            <jboss.deployUrl>scp://PROJECT_LAN_Host</jboss.deployUrl>
        </properties>
    </profile>
</profiles>

「antランチャー」を作成し、Eclipse antビューの下をクリックして使用します。

<target name="copy war to JBoss local" description="Copy war to local JBoss">
    <maven goal="upload:upload" options="-Pdeveloppement" />
</target>

ただし、コマンドラインで簡単に実行できます。

mvn upload:upload -Pdeveloppement

ちなみに、遠く離れた展開では、scpを機能させるためにログインパスワードが必要になる場合があります。それらをMaven settings.xmlファイルに追加する必要があります。

<settings>
  ...
  <servers>
    <server>
      <id>ENV_val</id>
      <username>login</username>
      <password>password</password>
    </server>
  </servers>
  ...
</settings>
9
Tristan

cargo または jboss-maven plugin (そのプラグインの@Andreas_Dへのクレジット)など、実際にアプリケーションをデプロイするプラグインを使用するのが最善のアプローチです。

デプロイは実際に実行しようとしていることなので、これはコピーツールまたは汎用アップロードツールを使用するより良いアプローチです。

貨物プラグインを使用すると、 実行中のさまざまなサーバーにデプロイする のオプションがあります。このアプローチで、ビルド中に jetty plugin を使用してローカルでjettyをテストし、貨物を介してオンデマンドでTomcatにデプロイするプロファイルを用意しました。

注:ターゲットサーバー(JBOSS)が開発ボックスにローカルにインストールされている場合、貨物を使用してサーバーを起動/停止することもできますビルドプロセスも同様です。このアプローチの欠点は、pomファイル内の場所を参照するために必要になるため、すべての開発者が同じ場所にインストールするか、場所を定義するシステムプロパティ(Java_HOMEと同様)をインストールすることです。

3
Robin