18

シナリオは次のとおりです。

2 つの Maven 3 プロジェクト ビルド。

ビルド 1 には、Nexus にデプロイされるスナップショット jar があります。

ビルド 2 には、 1.0.0-SNAPSHOTのように参照されるスナップショットへの依存関係があり、コマンドを使用してパッケージ化および圧縮されmvn clean package assembly:singleます。

私たちが遭遇した問題: 時折、アセンブリが作成されているときに、jar の MANIFEST ファイルがsome.jar.1.0.0-SNAPSHOTと表示されたり、 some.jar.1.0.0-datetime stamp と表示されたりすることがあります。クラスが定義されていないエラーが発生します。

マニフェスト ファイルでこの命名の問題を回避する方法はありますか?

- 編集 -

さらなる研究により、次のことが発見されました。

「スナップショットがリポジトリから解決された場合、タイムスタンプが付けられます。リアクターまたはローカル リポジトリから取得された場合は、-SNAPSHOT になります。プラグインは Maven 解決ロジックを呼び出すため、これは Maven のコア動作です。」

これはまさに直面している問題です。2 番目のビルド マニフェスト ファイルには常に./lib/Framework-1.0.0-SNAPSHOT.jarのエントリがあり、実際の jar ファイル名は./lib/Framework-1.0.0-SNAPSHOT.jar./lib/の間で変化します。上記の引用に基づくFramework-1.0.0-timestamp.jar 。

4

5 に答える 5

9

<dependencySet>設定する必要があります<outputFileNameMapping>${artifact.artifactId}-${artifact.baseVersion}.${artifact.extension}</outputFileNameMapping>

例えば:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
  <id>appserverB</id>
  <formats>
    <format>zip</format>
  </formats>
  <dependencySets>
    <dependencySet>
      <outputDirectory>/lib</outputDirectory>
      <outputFileNameMapping>${artifact.artifactId}-${artifact.baseVersion}.${artifact.extension}</outputFileNameMapping>
      <includes>
        <include>application:logging</include>
        <include>application:core</include>
        <include>application:utils</include>
        <include>application:appserverB</include>
      </includes>
    </dependencySet>
  </dependencySets>
</assembly>

組み込みのアセンブリ記述子の 1 つを使用している場合は、それを複製してoutputFileNameMapping自分でエントリを追加する必要があります。

于 2012-08-14T08:48:55.087 に答える
3

を使用maven-jar-pluginしてアーティファクトを作成し、その後 によってパックされ、maven-assembly-pluginアーティファクト名のクラスパスにタイムスタンプが表示される場合はuseUniqueVersions=false、次のようにを設定して無効にすることができます。

<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>${maven-jar-plugin.version}</version>
<configuration>
    <archive>
        <manifest>
            <addClasspath>true</addClasspath>
            <classpathPrefix>${project.build.finalName}.lib/</classpathPrefix>
            <mainClass>com.nate.Application</mainClass>
            <!-- To force the use of '-SNAPSHOT' version naming, simply disable the <useUniqueVersions>  -->
            <useUniqueVersions>false</useUniqueVersions>
        </manifest>
        <manifestEntries>
            <buildTime>${maven.timestamp}</buildTime>
        </manifestEntries>
    </archive>
</configuration>
于 2018-10-11T11:42:30.723 に答える
2

<useBaseVersion>false</useBaseVersion>依存関係のコピーが必要な場合は、を使用します。例えば ​​:

                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <version>2.8</version>
                    <executions>
                        <execution>
                            <id>copy</id>
                            <phase>package</phase>
                            <goals>
                                <goal>copy-dependencies</goal>
                            </goals>
                            <configuration>
                                <outputDirectory>${project.build.directory}</outputDirectory>
                                <useBaseVersion>false</useBaseVersion>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
于 2016-03-03T04:06:17.967 に答える
0

これに遭遇し、Stephen Connolly からの回答を見ても例外が発生する場合は、一部の依存関係の名前に分類子が含まれていることが原因である可能性があります。次に、dashClassifier をオプションの値として使用するようにパターンを調整する必要があります。

<outputFileNameMapping>${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}</outputFileNameMapping>

これは、使用される依存関係に分類子がない場合でも機能します。

詳細については、アセンブリ プラグインのドキュメントを参照してください。

于 2016-06-21T14:39:59.713 に答える