1

そのため、最初の痛みを乗り越えた後、それほど前のことではありませんが、すべてが機能していました....明らかにそうではありません!

メイン プロジェクトの POM とすべての子 POM があります (「フラットな」階層を使用しているため、すべてのサブ プロジェクトは親 POM と同じフォルダーにあります)。これは問題なく動作しているようです。

Maven の使用を開始する前に、すべてが開始され、「リリース」され、テストされたサブプロジェクト。「依存関係」の問題を解決するためにmavenに行きました...または、この場合はより複雑にしました。

「Maven」のほとんどは正常に動作しているようですが、ローカルの ms/repository にリリースされた「サブ プロジェクト」の依存関係を解決できません。

毎日、Eclipseを起動して同じ問題を抱えています。すべての個人ライブラリと、それらに使用するすべてのライブラリ(Log4j、DDlUtilsなど)で「インポートを解決できません」。

Mavenの要点は、ライブラリのインポート宣言を入れて、「groupID」などを子POM(または親POM)に追加できることだと思いました。そして、親に対して mvn install を実行すると、すべての jar が自動的にダウンロードされます。

ただし、毎日、Eclipseワークスペースを介してライブラリ(内部および外部)へのビルドパスを再挿入し、ダウンロードしたライブラリの場所を指す必要があることに気づきました。

具体的には、Junit テストを実行すると、ワークスペースから (run as junit を使用して) それらを実行でき、すべて問題なくパスします。しかし、mvn テストでそれらを実行しようとすると、 java.lang;NoClassDefFoundError: org/junit/Assert というメッセージが表示されます (これは、mvn テストを実行している Eclipse または CLI から同じです)、出力にエラー メッセージが表示されます。 / 目標の実行に失敗しました独自のシステムの一部であり、リポジトリに存在します。

しかし、Eclipseを介して実行し、個別にダウンロードしたjunitライブラリを指すと、これは明らかにうまく機能します。

あなたが必要とするかもしれない追加情報がわかりません.m2eプラグイン、私のmavenインストール、またはsonatypeのいずれかで明らかに何かが欠けています.

髪が抜け始めているので助けてください!すぐに ant/ivy ソリューションに戻らざるを得なくなる可能性があります (ただし、「まだ別のツール」(この場合は ivy) を学習する必要はありません)。

前もって感謝します

デビッド。

ps。私は Windows XP プラットフォームを使用しています

編集... テストに失敗していると思われる場合でも、maven に jar と pom をビルドしてリリースさせることはできますか (これは手動で行っているためではなく、問題なく合格します)。

親POMの「有効なPOM」タブを見ると、上記のプラグインはそこにありません。これは Maven 構成設定であることを意味していると思いますが、どこに追加すればよいのでしょうか? Maven テストの最初のセットを実行するときに、なぜ自動化されないのでしょうか?

編集2....

Apache プラグインのコメント ページ (http://maven.apache.org/plugins/maven-surefire-plugin/plugin-info.html) でこれを見つけたので、CLI でコードを実行しました mvn Surefire:help - Ddetail=true -Dgoal=test 多くのものがダウンロードされ、テストが実行されるようになりましたが、maven 内で失敗しますか? (「run as junit test」を使用してEclipseから実行すると合格することを思い出してください)...これはほぼ解決策です...

4

2 に答える 2

1

問題のプロジェクトがMavenプロジェクトであることをEclipseに認識させる必要があるようです。プロジェクトに POM を設定している場合がありますが、m2e プラグインを機能させるには、プロジェクトを Maven プロジェクトとして作成する必要があります ('New' -> 'Project...' -> 'Maven' -> 'Maven)。プロジェクト...」)、または右クリックして「構成」->「Maven プロジェクトに変換」を選択して Maven プロジェクトに変換します。以下のスクリーンショットに示すように、アイコンの左上に小さな青い「M」があるため、プロジェクトが Maven プロジェクトとして認識されていることがわかります。

いくつかの Maven Eclipse プロジェクト

上の図で注目すべき主な点は、「Maven Dependencies」ライブラリです。これは、m2e プラグインによって自動的に設定されます。依存関係を POM に追加するたびに、プロジェクトのビルド パスが自動的に構成されますが、プロジェクトを右クリックして [Maven] -> [Maven 構成の更新] を選択して強制的に構成する必要がある場合もあります。重要なことは、すべてが機能している場合は、ビルド パスを自分で更新する必要がないということです。また、自分で更新すると、次に「Maven 構成の更新」コマンドを実行したときに、行った変更が上書きされる可能性があります。

また、図から注目に値するのは、2 つの依存関係 'mavenProjectTest' と 'primes' の横にフォルダー アイコンがあることです。これは、それらがワークスペース プロジェクトとして取り上げられたことを意味します。これが機能するには、プロジェクトで「ワークスペースの解決」が有効になっている必要があり、選択されるプロジェクトも m2e Maven プロジェクトとして構成する必要があります。

外部ライブラリのダウンロードについて言及しています。ライブラリを自分でダウンロードする必要はありません。外部ライブラリに適切な依存関係宣言を追加することで、Maven は構成済みのリモート リポジトリからダウンロードします (最初はとにかく、その後はローカル リポジトリから取得できるようになります)。 )。デフォルトでは、これはMaven Central リポジトリーです。プロジェクトに外部ライブラリを追加するには、そのリンクをたどり、検索ボックスにライブラリを入力し、必要なバージョンのバージョン リンクをクリックします。次に、依存関係 XML 宣言があるページに移動します。コピーしてPOMに貼り付けるだけです。

もう 1 つ役立つ可能性があるのは、ソース フォルダーが Maven の既定のディレクトリ構造に従っていることを確認することです。つまり、テスト パッケージは「src/test/java」という名前のソース フォルダーに含まれている必要があり、メイン プロジェクト パッケージは「src/main/java」にある必要があります。そうしないと、Maven はソース コードの場所を認識できません。ソース コードが別のソース フォルダーにあることを Maven に指示するように POM を構成することは可能ですが、標準の Maven ディレクトリ構造に従うことを強くお勧めします。

子モジュールがあるので、新しい Maven プロジェクトを最初から作成して、いろいろ試してみることで物事を単純化することをお勧めします。それに慣れたら、マルチモジュール プロジェクトで m2e を動作させてみてください。

最初に Maven を使用したときの苦労を覚えていますが、Maven が何をしているかを理解し、すべてが機能していれば、それは素晴らしいことです。無料のオンライン ブックMaven: The Complete Referenceを読むことを強くお勧めします。これは、私が Maven を使い始めたときに大いに役立ちました。

于 2012-06-06T00:02:06.540 に答える
0

私は同じメッセージを経験し、私の組織の Maven エキスパートの 1 人のおかげで、有効な解決策を見つけました。

エラーを再現するpom.xml は次のとおりです。

  <dependencies>
    <dependency>
        <groupId>org.junit4</groupId>
        <artifactId>org.junit4</artifactId>
        <version>4.3.1</version>
    </dependency>
  </dependencies>

これで、package org.junit does not existメッセージとNoClassDefFoundError: org/junit/Assert. あなたの経験と同様に、Eclipse、緑色のバーなどすべてからうまく機能しました。

動作する pom.xml は次のとおりです。

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.8.1</version>
        <scope>test</scope>
    </dependency>
</dependencies>

この Using JUnit pageの上部にある例からこれをコピーしました。

于 2012-08-21T15:54:32.690 に答える