2009-10-16 23 views
9

(下記の編集を参照してください。)MavenのAntrunと依存

私はクラスパスを使用することはできません理由は、私はいくつかの非Javaライブラリを管理する必要があるためである、と私は非をコンパイルしていますJavaプロジェクト。

<property name="mvn.dependency.jar" 
     refid="maven.dependency.my.group.id:my.artifact.id:classifier:jar.path"/> 
<echo message="My Dependency JAR-Path: ${mvn.dependency.jar}"/> 

私ができる:ページの下部にある

http://maven.apache.org/plugins/maven-antrun-plugin/examples/classpaths.html

:私はMavenのサイト上の文書、以下、antrun呼び出しでMavenの依存関係を使用しようとしている

どのように試してもこの仕事はできません。私はrefidの内容の周りに$ {}を試しました、私はコロン、ピリオドなどを試しました。私が考えることのできるあらゆる方法でセパレータとして。

誰も私にそのrefidは何かを教えてください本当にはいくつかの共通の依存のように見える?

EDIT:あなたの返信用

感謝。あなたの例SINGLESHOTを使用して

は、私は次のようしている:

[INFO] Scanning for projects... 
[INFO] ------------------------------------------------------------------------ 
[INFO] Building Chat Component 
[INFO] task-segment: [compile] 
[INFO] ------------------------------------------------------------------------ 
Downloading: http://<redacted>/content/groups/public/log4j/log4j/1.2.14/log4j-1.2.14.pom 
2K downloaded 
Downloading: http://<redacted>/content/groups/public/log4j/log4j/1.2.14/log4j-1.2.14.jar 
358K downloaded 
[INFO] [antrun:run {execution: create-messages}] 
[INFO] Executing tasks 
[INFO] ------------------------------------------------------------------------ 
[ERROR] BUILD ERROR 
[INFO] ------------------------------------------------------------------------ 
[INFO] Error executing ant tasks 

Embedded error: Reference log4j:log4j:jar not found. 
[INFO] ------------------------------------------------------------------------ 
[INFO] For more information, run Maven with the -e switch 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 3 seconds 
[INFO] Finished at: Fri Oct 16 14:54:19 PDT 2009 
[INFO] Final Memory: 7M/80M 
[INFO] ------------------------------------------------------------------------ 

EDIT(2):

探し

<plugins> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <executions> 
     <execution> 
     <id>create-messages</id> 
     <phase>compile</phase> 
     <configuration> 
      <tasks> 
      <property name="build.compiler" value="extJavac"/> 
      <property name="compile_classpath" refid="maven.compile.classpath"/> 
      <property name="runtime_classpath" refid="maven.runtime.classpath"/> 
      <property name="test_classpath" refid="maven.test.classpath"/> 
      <property name="plugin_classpath" refid="maven.plugin.classpath"/> 

      <property name="log4j.jar" refid="log4j:log4j:jar"/> 
      <echo message="Where is the Log4J JAR?: ${log4j.jar}"/> 
      </tasks> 
     </configuration> 
     <goals> 
      <goal>run</goal> 
     </goals> 
     </execution> 
    </executions> 
    <dependencies> 
     <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.14</version> 
     </dependency> 
    </dependencies> 
    </plugin> 

そしてここでは、MVNのコンパイルを実行したときに、私は何を得るのですリンクされたソースコードで、 "mvn -X compile"を実行し、 "Storing"のgrepを実行することにしました。 g保存される。興味深いのは

私はエントリのいずれかに基づいてキーに切り替えたとき、私はが見るんことを、私は明示的に指定しています依存関係がリストに表示されていない事実であり、私はまだ取得しますエラー。

答えて

9

SingleShotがリンクしているコードに基づいて、それがうまくいくまで無作為に突き刺すことは、この問題がどのように "働いている"かを示しています(非常に薄いと感じるので、ここでは)

は、それが適切に動作させるための方法です:

<property name="log4j_location" 
       value="${maven.dependency.log4j.log4j.jar.path}"/> 
<echo message="${log4j_location}"/> 

注意すべきいくつかの重要な事柄:あなたははアリプロパティの設定でREFIDとしてMavenの依存関係を使用することはできません。 $ {}を使用してmavenのvar値を取得する必要があります。

依存関係はトップレベルの依存関係リストになければなりません。log4jをantrunプラグインの依存関係にしても、どうにか私はそれをプラグインに公開しません。

すべてのパス区切り文字はドット(。)で、コロン(:)はありません。これは最終的に私自身の答えを正しいものとしてチェックした理由です。

のSoapboxは:

私は非常にMavenがさらに良く、代わりにアイビーでのAntを使用して、MavenのプラグインでのAntを使用するか検討し、誰をお勧めします。

この特定の問題は、mavenで標準から何かを行うことに関連する、まったく不条理なレベルの難しい例です。

これは、Maven2に基づいたビルドシステム全体を実装し、Antにいくつかのビルドシステムを実装したと言います。私はMaven2とAntの両方を、Java、Flex/AS3、C#、C++の複雑なビルドで使用しました。 MavenはのJavaプロジェクトには意味があり、他の言語のプロジェクトにははありません。外部依存関係です。

Mavenは、Antによって暗黙的に扱われていないいくつかのことに対処しますが、いくつかの前向きな計画では、Antははるかに柔軟で、文書化されており、バグの少ないツールです。

あなたがantルートに行くことを決めたら、あなたのプロジェクトに構造を定義して、依存システム(を使用してください。)を見つけてください。

ビルドシステムを修正しようとするときに忙しい時を過ごさないので、最終的にMavenよりもずっと幸せになると思います。

2

あなたのPOMに入力したものの例はありませんが、具体的な例を考えてみてください。あなたのPOMがlog4j(groupId = log4j、artifactId = log4j)を参照しているとしましょう。私はこれがあなたのAntファイルにそのJARを参照する方法をであると考えている。理想的には

<property name="log4j.jar" refid="maven.dependency.log4j:log4j:jar.path"/> 
<echo message="Where is the Log4J JAR?: ${log4j.jar}"/> 

あなたが特定のJARファイルを参照する必要があるのではなく、ややまばらなドキュメントとして、適切な範囲のための全体のクラスパスを参照するべきではありませんプラグインが示すとおりです。

まだ問題がある場合は、使用しているMaven POM依存関係の<dependency>タグを投稿してください。より具体的にすることができます。

確認するためにplugin's codeを見ました。

+0

申し訳ありません。私の元の答えは "maven.dependency"を逃した。接頭辞と ".path"接尾辞。これは修正されており、動作するはずです。プラグインソースの87行目(上にリンクされています)を見て、どのように見えるかを見てください。 – SingleShot

4

上記のAaron H.の補足として、プラグインのバージョンを1.3に設定して実際に動作させる必要がありました。私は特定のバージョンなしでそれを使用していて、1.1(何も動作していないと思われる)を取得していました。


     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-antrun-plugin</artifactId> 
     <version>1.3</version> 
     ... 
     </plugin> 
+1

私は、違いは私たちが使っているリポジトリであると考えています。これは、imho(あるいはそれほど謙虚ではないかもしれません)、単に "それはちょうど"働く場所の別の例です。 –

1

bug in the documentationがあります。パスの形式は次のようになります。

<property name="mvn.dependency.jar" 
    value="${maven.dependency.my.group.id.my.artifact.id.classifier.jar.path}"/> 

だからあなたのlog4jの依存関係のための正しいキーは次のようになります。

maven.dependency.log4j.log4j.jar.path 

はまた、それがvalue=いうよりrefid=なければならないことに注意してくださいので、完全なプロパティは次のようになります:

<property name="log4j.jar" 
     value="${maven.dependency.log4j.log4j.jar.path}"/> 
<echo message="My Dependency JAR-Path: ${log4j.jar}"/> 
0

私は既存のアリを持っており、(new)mavenを使用して呼び出す予定です。私は覚えていないかもしれない問題に遭遇しましたが、それはあなたのようなクラスパッセに関連しています。

問題は、私たちが毎日使っている "ant"は、XNIXとWindowsの両方でクラスパッシュを設定するシェルスクリプトです。私はクラスパットをそれとMavenで利用できるものと比較していないが、私のテストではマッチしないことが示され、蟻はMavenから渡されたいくつかのパッセを実行しないことを示した。

私が使っているのは "exec-maven-plugin"で、いくつかの引数を適用してantを外部プログラムとして実行しています。これは確かに動作しますが、余分な依存関係を追加します。

2

これは私のために働く。

<copy file="${javax.mail:javax.mail-api:jar}" todir="tomcat/lib" /> 
<copy file="${org.springframework:spring-instrument-tomcat:jar}" todir="tomcat/lib" /> 
<copy file="${postgresql:postgresql:jar}" todir="tomcat/lib"/> 

http://maven.apache.org/plugins/maven-antrun-plugin/examples/classpaths.html依存性がアリクラスパスを形成参照する方法の説明を有します。