【问题标题】:Classpath problems:running ant java task with Maven Antrun plugin类路径问题:使用 Maven Antrun 插件运行 ant java 任务
【发布时间】:2012-08-14 13:30:56
【问题描述】:

从 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 位置的值设置为 '

【问题讨论】:

    标签: java maven ant classpath


    【解决方案1】:

    我想我在沮丧一段时间后找到了解决方案:灵感来自this thread

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

    因此解决方案是使用&lt;reference&gt; 元素显式传递您想要访问的任何类路径引用。

            <!-- 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>
    

    【讨论】:

      【解决方案2】:

      在 Maven 中:

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

      在 Ant 中使用 pathelement 而不是路径 refid

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

      然后就可以了

      【讨论】:

        【解决方案3】:

        您在这里遇到的问题是 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 可能是我获取构建文件的方式。

        【讨论】:

          【解决方案4】:

          很抱歉重新启动一个旧线程,但是今天我自己遇到这个问题后,我注意到 Maven 文档中有一个错误。正如你所发现的

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

          不起作用。不过,

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

          应该可以。当然你也可以直接使用${maven.compile.classpath}

          Maven bugtracker 声称此文档错误是 fixed 4 years ago,但截至今天,它在最后一次推送的文档中是 still exists(2011 年末)。

          【讨论】:

            猜你喜欢
            • 2012-05-06
            • 1970-01-01
            • 1970-01-01
            • 2012-06-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-09-10
            • 1970-01-01
            相关资源
            最近更新 更多