3

从 maven ant run 插件运行 ant 任务时,我可以将 maven 类路径设置为 ant 属性。但是,当我尝试运行<ant:java设置此确切类路径的任务时,我收到无法找到引用的错误。好像整个类路径被解释为一个 jar。有没有办法以某种方式将此类路径设置为 ant java 任务?

(来自行家)

<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

我想我在沮丧了一段时间后找到了解决方案:受此线程的启发

antantrun 插件正确地构造了类路径引用,但在调用任务时没有将它们传递给外部构建文件。

因此,解决方案是显式传入您想要使用该<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 build 任务中正常使用它们

<!-- 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 回答
3

在 Maven 中:

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

在 Ant 中使用 pathelement 而不是 path refid

<path id="classpath">
    <pathelement path="${compile_classpath}"/>
</path>

然后它工作

于 2013-07-25T01:20:52.610 回答
0

Sorry to rebump an old thread, but after running into this myself today, I noticed that the Maven documentation has a bug in it. As you've discovered

<property name="compile_classpath" refid="maven.compile.classpath"/>

doesn't work. However,

<property name="compile_classpath" value="${maven.compile.classpath}"/>

should work. Of course, you can also use ${maven.compile.classpath} directly.

The Maven bugtracker claims that this documentation bug was fixed 4 years ago, but as of today's date, it still exists in the last documentation pushed (in late 2011).

于 2013-06-11T18:31:40.273 回答
0

您在这里遇到的问题是 compile_classpath 是一个 Ant 属性。表达式 ${compile_classpath} 解析为属性的值。

而 path 元素上的 refid 属性需要对路径的引用。基本上,您会遇到运行时类型错误,其中需要路径 ref,但您提供的是字符串。

您真正想要做的是将 maven.compile.classpath 直接传递到您的 Ant 路径元素中。因为两者都在处理路径对象。但这不起作用。

所以我想出的解决方法是将各个 jar 的路径作为属性从 Maven 传递到 Ant 构建文件。

在 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 回答