为了避免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)
答案 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>