19

jarmy pom.xmland runningで以下を使用してデプロイできmvn deployます。

    <distributionManagement>
    <repository>
        <id>releases</id>
        <url>http://${host}:8081/nexus/content/repositories/releases</url>
    </repository>
    <snapshotRepository>
        <id>snapshots</id>
        <name>Internal Snapshots</name>
        <url>http://${host}:8081/nexus/content/repositories/snapshots</url>
    </snapshotRepository>
</distributionManagement>

jar-with-dependenciesそして、次を使用して実行可能ファイルをビルドできます。

        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <executions>
                <execution>
                    <id>create-executable-jar</id>
                    <phase>deploy</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                    <configuration>
                        <descriptorRefs>
                            <descriptorRef>jar-with-dependencies</descriptorRef>
                        </descriptorRefs>
                        <archive>
                            <manifest>
                                <mainClass>my.company.app.Main</mainClass>
                            </manifest>
                        </archive>
                    </configuration>
                </execution>
            </executions>
        </plugin>

jar問題は、これらをつなぎ合わせて実行可能ファイルを Maven リポジトリにデプロイする方法がわからないことです。これが新しいプラグインによって達成されるのか、それとも既存のアセンブリ プラグインに目標やその他のステップを追加することによって達成されるのか、私にはよくわかりません。

4

5 に答える 5

5

(いわゆる) Über JAR をビルドし、maven を使用してデプロイするには、shade プラグインを使用することもできます。次のコードは Web サイトから取得したものですが、この機能を使用して 1 つまたは 2 つのプロジェクトを作成しました。

 <project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>2.0</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <shadedArtifactAttached>true</shadedArtifactAttached>
              <shadedClassifierName>jackofall</shadedClassifierName> <!-- Any name that makes sense -->
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  ...
</project>

この構成では、通常の JAR に加えて、1 つのデプロイメントとして Über JAR を取得します。JAR のユーザーは、分類子に基づいて、オールインワン パッケージまたは依存関係を持つ JAR をプルすることを決定できます。

私は通常、shade プラグインを使用して Über JAR をビルド (または JAR を何らかの方法で変更) し、アセンブリ プラグインを使用してインストール パッケージなど (JAR とその他のものを含む) をビルドします。ただし、単一のプラグインの意図された目標が何であるかはわかりません。

于 2012-12-13T18:42:03.303 に答える
3

以下が機能しました。私はこれがベストプラクティスであると確信していないので、この質問を少し開いたままにしますが、作業は何かです.

私が気付いた問題は、ID 名を作成したことと、これが通常の方法であるかどうかわからないことと、jar 名をハードコーディングする必要があることです。それは他から推測されるものではありません。

<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.7</version>
<executions>
    <execution>
        <id>deploy-executable</id>
        <goals>
            <goal>deploy-file</goal>
        </goals>
        <configuration>
            <file>target/Monitoring-Client-1.0-SNAPSHOT-jar-with-dependencies.jar</file>
        </configuration>
    </execution>
</executions>
</plugin>
于 2012-12-13T18:26:45.540 に答える
0

本質的に、これを行うのが困難だったという事実は、私pom.xmlがすでに軌道から外れているという事実を明らかにしました。すべてが自然に所定の位置に収まっていたでしょう。私は以前やっていた:

  • すべての依存関係を lib フォルダーに保存します
  • そのlibフォルダーを丸呑みするクラスパスでjarを構築します
  • アセンブリ プラグインを使用して、デプロイ可能な別の jar を作成します

途中でこのような理由がいくつかあったと思います。特に、ライブラリがアプリケーションから十分に分解されていなかった場合にそうです。

ただし、1 と 2 を削除すると、必要なのはdistributionManagementセクションだけであり、デプロイ フェーズは自動的に機能します。全体として、これは大量のコードを削除することによって文字通り機能を追加した驚くべきケースです。

于 2012-12-13T19:15:28.940 に答える
0

まず、デプロイ フェーズで ueber jar の作成を行うべきではありません。パッケージ フェーズでこれを行う方がよいでしょう。さらに、作成された jar ファイルは通常、アーティファクトに自動的に添付され、リモート リポジトリ (この場合は Nexus) に転送されます。mvn install を実行して、作成された jar がローカル リポジトリにインストールされているかどうかの出力を確認するだけで、これを確認できます。結果を nexus にデプロイするには、mvn deploy を呼び出す必要があります。

于 2012-12-14T08:09:53.830 に答える