136

Mac 10.6.6 で Maven 3.0.3 を使用しています。JAR プロジェクトがあり、コマンド「mvn clean install:install」を実行すると、エラーが発生します。

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-install-plugin:2.3.1:install (default-cli) on project StarTeamCollisionUtil: The packaging for this project did not assign a file to the build artifact -> [Help 1]

これは何を意味し、どうすれば修正できますか? 以下は私のpom.xmlです。他に役立つ情報を教えてください。この投稿を編集します。ありがとう - デイブ

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.myco.starteam.util</groupId>
<artifactId>StarTeamCollisionUtil</artifactId>
<packaging>jar</packaging>
<name>StarTeam Collision Util</name>
<description>
    The StarTeam Collision Utility provides developers and release engineers alike the ability to
    compare files attached to a set of CRs to see if conflicts exist in the change set.
</description>
<version>1.0-SNAPSHOT</version>
<url>http://cm-build.myco.com:8080/hudson/view/Tools/job/StarTeamCollisionUtil - TRUNK/</url>
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<repositories>
    <repository>
        <id>myco-sonatype-nexus-snapshots</id>
        <name>MyCo Sonatype-Nexus Snapshots</name>
        <url>http://sonatype.myco.com/nexus/content/repositories/snapshots/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>starteam</groupId>
        <artifactId>starteam</artifactId>
        <version>1.1.0</version>
        <type>jar</type>
        <scope>system</scope>
        <systemPath>${basedir}/lib/starteam110.jar</systemPath>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.8.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.ant</groupId>
        <artifactId>ant</artifactId>
        <version>1.8.1</version>
    </dependency>
    <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>mail</artifactId>
        <version>1.4.1</version>
        <type>jar</type>
        <scope>compile</scope>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.8.1</version>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-site-plugin</artifactId>
            <version>3.0-beta-3</version>
            <configuration>
                <reportPlugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-report-plugin</artifactId>
                        <version>2.5</version>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-javadoc-plugin</artifactId>
                        <version>2.7</version>
                        <configuration>
                            <linksource>true</linksource>
                        </configuration>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-jxr-plugin</artifactId>
                        <version>2.2</version>
                    </plugin>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>versions-maven-plugin</artifactId>
                        <version>1.2</version>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-project-info-reports-plugin</artifactId>
                        <version>2.3.1</version>
                        <reportSets>
                            <reportSet>
                                <reports>
                                    <report>index</report>
                                    <report>dependencies</report>
                                    <report>dependency-management</report>
                                    <report>cim</report>
                                    <report>issue-tracking</report>
                                    <report>license</report>
                                    <report>scm</report>
                                </reports>
                            </reportSet>
                        </reportSets>
                    </plugin>
                </reportPlugins>
            </configuration>
        </plugin>
    </plugins>
</build>
<distributionManagement>
    <repository>
        <id>sonatype-nexus</id>
        <url>http://sonatype.myco.com/nexus/content/repositories/snapshots/</url>
    </repository>
</distributionManagement>
<scm>
    <url>https://starteam.cmass.myco.com/BorlandStarTeam/BorlandStarTeam.jsp</url>
</scm>
<issueManagement>
    <system>StarTeam</system>
    <url>https://starteam.cmass.myco.com/BorlandStarTeam/BorlandStarTeam.jsp</url>
</issueManagement>
<ciManagement>
    <system>Hudson</system>
    <url>http://cm-build.myco.com:8080/hudson/</url>
</ciManagement>
</project>
4

12 に答える 12

217

これが答えかどうかはわかりませんが、正しい方向に導くかもしれません...

コマンドinstall:installは、実際にはmaven-install-pluginの目標です。これは、installMaven ライフサイクル フェーズとは異なります。

Maven ライフサイクル フェーズは、特定のプラグインがバインドできるビルドのステップです。単一のライフサイクル フェーズを呼び出すと、さまざまなプラグインのさまざまな目標が実行される場合があります。

これが要約すると、コマンドは...

mvn clean install

とは異なります...

mvn clean install:install

前者は、インストールに至るまでのすべてのサイクルですべての目標を実行します (コンパイル、パッケージ、テストなど)。後者は、コードをコンパイルまたはパッケージ化することさえせず、その 1 つの目標を実行するだけです。例外を見ると、これはちょっと理にかなっています。それについて話します:

StarTeamCollisionUtil: このプロジェクトのパッケージは、ファイルをビルド アーティファクトに割り当てませんでした

前者を試してみると、エラーがなくなるかもしれません!

于 2011-06-10T20:27:48.093 に答える
120

TL;DRこの問題を解決するには、次のように、パッケージ化のjar使用などの前にパッケージング プラグインを呼び出します。maven-jar-plugin

mvn jar:jar install:install

または

mvn jar:jar deploy:deploy 

実際に展開する必要がある場合。

落とし穴異なるパッケージ (ear/war/jar/zip) を持つマルチモジュール プロジェクトがある場合、このアプローチは機能しません。さらに悪いことに、間違ったアーティファクトがインストール/デプロイされます! そのような場合は、リアクター オプションを使用して、展開可能なモジュール (たとえばwar) のみをビルドします。


説明

場合によっては、実際にinstall:installまたはdeploy:deployゴールを直接実行したい場合 (つまり、 Mavenフェーズmaven-deploy-pluginではなく、ゴールから) が発生し、面倒な.deploydeploy The packaging for this project did not assign a file to the build artifact

古典的な例は、CI ジョブ (Jenkins や Bamboo ジョブなど) で、さまざまなステップでさまざまな側面を実行/処理する必要があります。

  • 最初のステップはmvn clean install、テストとテスト カバレッジの実行です。
  • 2 番目のステップは、品質プロファイルに基づく Sonarqube 分析です。たとえばmvn sonar:sonar、さらにオプションを追加します。
  • 次に、テストの実行が成功し、品質ゲートが通過した後でのみ、Maven エンタープライズ リポジトリに最終的なプロジェクト アーティファクトをデプロイしますが、mvn deploy前のフェーズ (およびコンパイル、テスト) を再度実行するため、再実行は望まないなど)、ビルドを効果的でありながら高速にしたい.

はい、この最後のステップを高速化するには、少なくともテストをスキップするか (コンパイルと実行、を介して-Dmaven.test.skip=true)、特定のプロファイルを使用して再生します (できるだけ多くのプラグインをスキップするため) mvn deploy:deploy

ただし、プラグイン FAQ にも指定されているため、上記のエラーで失敗します。

パッケージ化段階では、すべてが収集され、コンテキストに配置されます。このメカニズムにより、Maven は と が同じファイル セットをコピー/アップロードしていることを確認できmaven-install-pluginますmaven-deploy-plugin。したがって、 のみを実行するdeploy:deployと、コンテキストに配置されるファイルはなく、展開するものは何もありません。

実際、deploy:deploy前のフェーズ (または前のプラグイン/ゴールの実行) によってビルド コンテキストに配置されたランタイム情報が必要です。

また、潜在的なバグとして報告されていますMDEPLOY-158

しかし、その後、問題ではないと拒否されました。

deployAtEnd構成オプションは、maven-deploy-plugin実行する中間ジョブ ステップがあるため、特定のシナリオでは役に立ちません。

すべてのプロジェクトを独自のデプロイ フェーズでデプロイするか、マルチモジュール ビルドの最後にデプロイするか。に設定した場合true、ビルドが失敗すると、どのリアクター プロジェクトも配置されません。(実験的)

それで、それを修正する方法は?
このような同様の 3 番目/最後のステップで次を実行するだけです。

mvn jar:jar deploy:deploy

は、デフォルトで設定されているオプションmaven-jar-pluginのおかげで、ビルドの一部として jar を再作成しません。forceCreationfalse

コンテンツがまったく変更されていないように見える場合でも、jar プラグインが新しい JAR を構築する必要があります。デフォルトでは、このプラグインは、出力 jar が存在し、入力が変更されていないかどうかを確認します。これらの条件が true の場合、プラグインは jar の作成をスキップします。

しかし、それは私たちのためにビルド コンテキストを適切に設定し、deploy:deploy満足させてくれます。スキップするテストも、追加するプロファイルもありません。まさに必要なもの: スピード。


追加の注意:またはその他の同様のプラグインを使用して、後で使用されるメタデータを生成する場合build-helper-maven-plugin(マニフェスト ファイルのエントリなど)、ほとんどの場合、フェーズにリンクされた実行があり、実行中にそれらを保持したい場合があります。ビルドステップ(それでも高速な実行を維持します)。この場合、ほとんど無害なオーバーヘッドは、次のようにフェーズを呼び出すことです。buildnumber-maven-pluginmaven-jar-pluginvalidatejar:jarvalidate

mvn validate jar:jar deploy:deploy

さらに別の追加の注意:パッケージ化を行っていない場合はjar、代わりにインストール/デプロイの前に使用してください。warwar:war

上記で指摘したように、マルチモジュールプロジェクトでの動作を確認してください。

于 2016-07-01T14:38:43.903 に答える
7

私は同じ問題を抱えています。私へのエラーメッセージは完全ではありません。しかし、私の場合は、ソースを含むジェネレーション jar を追加しました。このコードを pom.xml に配置すると、次のようになります。

<build> 
    <pluginManagement>
        <plugins>
            <plugin>
                <artifactId>maven-source-plugin</artifactId>
                <version>2.1.2</version>
                <executions>
                    <execution>
                        <phase>deploy</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

したがって、展開フェーズで、ソースを含むjarを生成する source:jar ゴールを実行します。デプロイは BUILD SUCCESS で終了します

于 2012-02-15T21:55:48.427 に答える
2

you must clear the target file such as in jar and others In C: drive your folder at .m2 see the location where it install and delete the .jar file,Snaphot file and delete target files then clean the application you found it will be run

于 2012-07-17T06:16:08.900 に答える