如果我使用<pathelement location =“”> </pathelement>,Ant会出现CNF问题

时间:2012-03-27 12:00:13

标签: ant

为了避免Windows中的长类路径问题,我修改了我的build.xml,如[1] 引入了一个名为“temp”的属性,并从“路径位置”引用该属性 但现在我得到“Class not found”异常[2]。 我该如何更正我的剧本?

如果我不使用“temp”属性并尝试将“temp.classpath”读作我的“javac”类路径“我得到长类路径问题..(这就是为什么我介绍了该属性并制作了”javac“路径为“javac.classpath”)

[1]
<target name="init">
        <mkdir dir="${class.dir}"/>
        <mkdir dir="./../../work/temp/sampleClient"/>       
          <path id="temp.classpath">        
            <pathelement path="${class.dir}"/>
            <pathelement path="../../lib"/>         
            <fileset dir="../../repository/components/plugins">             
                <include name="*.jar"/>                 
            </fileset>>
            <fileset dir="../../lib">
                <include name="*.jar"/>
            </fileset>
            <fileset dir="../../lib/endorsed">
                <include name="*.jar"/>
            </fileset>
            <fileset dir="../../repository/components/extensions">
                <include name="*.jar"/>
            </fileset>
            <fileset dir="../../repository/components/lib">
                <include name="*.jar"/>
            </fileset>  
             </path>    
        <property name="temp" refid="temp.classpath" />
        <path id="javac.classpath"> 
            <pathelement location="${temp}"/>       
        </path>         
    </target>


[2]

init:

compile:

stockquote:
     [java] java.lang.NoClassDefFoundError: samples/userguide/StockQuoteClient
     [java] Caused by: java.lang.ClassNotFoundException: samples.userguide.StockQuoteClient
     [java]     at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
     [java]     at java.security.AccessController.doPrivileged(Native Method)
     [java]     at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
     [java]     at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
     [java]     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)

2 个答案:

答案 0 :(得分:2)

在ANT中为避免长类路径问题, ManifestClasspath任务可用..我使用它,现在它在Windows和Linux中正常工作.. 我在这里写了一篇博客[1]条目和样本..如果有人发现它有用..

http://vvratha.blogspot.com/2012/04/avoiding-long-classpath-issue-in-ant.html

答案 1 :(得分:0)

&lt; path&gt;如果你愿意,element是一个第一类对象,所以它的引用id可以在预期路径的任何地方使用,但需要注意的是它通常是一个稍微不同的属性。对于isntance:

<javac ... classpathref="temp.classpath" >
   ...
</javac>

会做得很好。

所以你不需要,也不能通过财产传递它。

[编辑我的评论如下] 但是,如果你坚持,你可以试试:

 <path id="javac.classpath"> 
     <pathelement path="${temp}"/>       
 </path>         

注意路径属性代替位置。

或者,如果你坚持使用隐含的javac.classpath引用:

 <path id="javac.classpath"> 
     <path refid="temp.classpath"/>       
 </path>