3

maven ant run プラグインから ant タスクを実行すると、maven クラスパスを ant プロパティとして設定できます。ただし、<ant:javaこの正確なクラスパスを設定してタスクを実行しようとすると、参照が見つからないというエラーが発生します。クラスパス全体が 1 つの jar として解釈されるかのように。このクラスパスを ant Java タスクに何らかの方法で設定する方法はありますか?

(mavenから)

<plugin>
   <artifactId>maven-antrun-plugin</artifactId> 
     ....
   <property name="compile_classpath" refid="maven.compile.classpath"/>
   ....

(アリから) ...

<path id="classpath">
   <path refid="${compile_classpath}"/>
</path>
...
<java   classname="..." classpathref="classpath">
...
</java>

maven ant run プラグインのバージョンは 1.7 です

これができない場合、ant でこのクラスパス文字列 (';' セパレーターを含む jar ファイルの場所) を繰り返し処理し、jar の場所の値を ' として設定する方法があります。

4

4 に答える 4

5

しばらくイライラした後、この解決策にたどり着いたと思います:このスレッドに触発されました

antrun プラグインはクラスパス参照を正しく構築していますが、antタスクを呼び出すときにそれらを外部ビルド ファイルに渡しません。

<reference>したがって、解決策は、要素を使用してアクセスするクラスパス参照を明示的に渡すことです。

        <!-- antrun plugin execution -->
        <plugin>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.7</version>
            <executions>
                <execution>
                    <id>build</id>
                    <phase>compile</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                    <configuration>
                        <target>
                            <ant antfile="${basedir}/build.xml">
                                <!-- This is the important bit -->
                                <reference torefid="maven.compile.classpath" refid="maven.compile.classpath"/>
                            </ant>
                        </target>
                    </configuration>
                </execution>
            </executions>
        </plugin>

そして、ant ビルド タスクで通常どおりそれらを消費します。

<!-- External ant build referencing classpath -->
 <java classname="net.nhs.cfh.ebook.Main" fork="true" failonerror="true">
     <arg value="-b"/>
     <arg value="${dist.dir}"/>
     <arg value="-o"/>
     <arg value="${xml.dir}/treeindex"/>
     <arg value="tree.xml"/>
     <jvmarg value="-Dstrategy=treeParser"/>
     <!-- reference to the passed-in classpath reference -->
     <classpath refid="maven.compile.classpath"/>
 </java>
于 2013-07-15T13:47:59.340 に答える
0

ここでの問題は、compile_classpath が Ant プロパティであることです。式 ${compile_classpath} は、プロパティの値に解決されます。

一方、path 要素の refid 属性には、パスへの参照が必要です。基本的に、パス参照が期待されているが文字列を提供しているランタイムタイプのエラーが発生しています。

本当にやりたいことは、maven.compile.classpath を Ant パス要素に直接渡すことです。どちらもパスオブジェクトを扱っているためです。しかし、これはうまくいきません。

そこで私が思いついた回避策は、Maven から Ant ビルド ファイルへのプロパティとして個々の jar へのパスを渡すことでした。

Maven の場合:

<plugin>
<artifactId>maven-antrun-plugin</artifactId>
...
    <property name="example.jar" 
        value="${org.example.example:example-artifact:jar}"/> 
    ...

アリの場合:

<path id="classpath">
    <path location="${example.jar}"/>
</path>

これは機能しますが、Maven クラスパスに複数の依存関係がある場合、または推移的な依存関係を渡したい場合は明らかにひどいものです。Ant Ivy はおそらく、ビルド ファイルを取得する方法だと思います。

于 2013-02-19T20:35:01.897 に答える