1

マルチプロジェクトのmavenプロジェクトから単一の実行可能なjarファイルを作成しようとしています. これが私のプロジェクト構造であり、その後にmavenアセンブリプラグインでやろうとしたことが続きます。多くの人が解決策について私にヒントをくれることに感謝します(これは私には最も一般的な根拠のように思えますが、他のディスカッションチェーンでは見つけることができませんでした). ありがとう!

私が持っている構造は(簡略化)です:

マイアプリ

…
  <groupId>myApp</groupId> <artifactId>myApp</artifactId>
  <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging>
  <name>myApp</name>  <url>http://maven.apache.org</url>
…  
  <build>
     <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <configuration>
        <source>1.6</source>  <target>1.6</target>
      </configuration>
    </plugin>
      </plugins>
  </build>

  <modules>
    <module>../m1</module> <!--  jar-->
    <module>../m2</module> <!--  war -->
    <module>../subAppPomAggregationProject</module>
  </modules>  

  <dependencies>
…
  </dependencies>
</project>

以下のプラグインを myApp pom ファイルに追加しようとしました:

<plugin>
  <artifactId>maven-assembly-plugin</artifactId>
  <version>2.4</version>
 <configuration>
   <appendAssemblyId>false</appendAssemblyId>
      <archive>
         <manifest>
            <mainClass>com.mypath.Main</mainClass>
         </manifest>
      </archive>
      <descriptorRefs>
    <descriptorRef>jar-with-dependencies</descriptorRef>
      </descriptorRefs>
 </configuration>
 <executions>
    <execution>
       <id>make-assembly</id>
       <phase>package</phase>
       <goals>
           <goal>single</goal>
       </goals>
    </execution>
 </executions>
</plugin>

もちろん、MyApp 用の jar は作成しませんでしたが、実際にはすべての依存関係があるわけではありませんが、各モジュール (!) に集約された jar のように見えるものを作成しました。

また、モジュールまたは MyApp の依存関係を使用して別の uber プロジェクト (jar) を作成しようとしましたが、どちらも機能しませんでした。MyApp にインポートされたすべてのモジュールを (subAppPomAggregationProject にインポートされたモジュールと共に) uber-jar にリストすることになっていましたか? それを試しませんでしたが、もしそうなら、pom アグリゲーターの目的は何ですか? また、なぜ 2 段階のコンパイル/集約アプローチを使用するのですか?

maven-shade-plugin を試すことができませんでした (それが役立つかどうかはわかりません)。これには maven 3 が必要で、現在 2.2.1 を使用しているためです (近いマイルストーンの直前にアップグレードしてシェイクする必要はありません…)。

4

2 に答える 2

0

シェード プラグインの場合は、古いバージョンを使用できます。バージョン 1.7.1 は、Maven 2.x で動作するシェードの最後のリリースであり、実行可能な jar ファイルを作成するために動作します...構文はほとんど同じである必要があります。メジャー バージョン番号の切り替えは、切り替えを示すものでした。要件としてMaven 3に。

于 2013-06-01T08:33:04.937 に答える
0

このような環境で機能するソリューション アプローチは、階層集約です。したがって、最初に subAppPomAggregationProject.aggregate maven プロジェクトを作成して subAppPomAggregationProject の単一の jar を作成し、その pom ですべての subAppPomAggregationProject モジュールを依存関係として指定し、maven-assembly プラグインを追加します。

<build>
   <plugins>
      <plugin>
         <artifactId>maven-assembly-plugin</artifactId>
         <version>2.4</version>
         <configuration>
             <appendAssemblyId>false</appendAssemblyId>
             <descriptors>
                <descriptor>src/assembly/bin.xml</descriptor>
             </descriptors>
             <descriptorRefs>
                <descriptorRef>jar-with-dependencies</descriptorRef>
             </descriptorRefs>
         </configuration>
         <executions>
           <execution>
              <id>make-assembly</id>
              <phase>package</phase>
              <goals>
                 <goal>single</goal>
              </goals>
           </execution>
         </executions>
      </plugin>
    </plugins>
</build>]

次に、アプリ レベルで同じことを行います。作成された subAppPomAggregationProject 集計 jar はモジュールの 1 つです。

各レベルで依存関係間の競合が解決されるため、依存関係のいずれも次のレベルの集約で競合を引き起こしません (それらは単一の jar で既に相対的に表示されているため... またはそれらの行に沿った何か:-))。

于 2013-10-22T08:14:37.127 に答える