2012-03-27 48 views
0

爲了避免在Windows中長期的類路徑問題,我修改了我的build.xml像[1] 引入了一個名爲「temp」的屬性, 「路徑位置」 但現在我得到「類未找到」異常[2]。 如何糾正我的腳本?Ant給CNF的問題,如果我使用<pathelement location =「」>

如果我不使用「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

的<路徑>元素是第一類對象,如果你願意,所以其參考ID可用於任何地方的路徑的預期,需要提醒的是它通常是一個稍有不同的屬性。對於isntance:

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

wi我會做得很好。

所以你不需要,而且你不能通過它的屬性。

[按我的評論編輯下面] 如果你堅持,雖然,你可以嘗試:

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

公告代替位置的路徑屬性。

或者,如果你堅持使用隱含javac.classpath參考:

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

我的javac這樣定義; \t \t \t <類路徑REFID = 「javac.classpath」/> \t \t \t 如你所說如果我使用「 classpathref =「temp.classpath」生病在Windows中獲得長類路徑問題...我試圖避免這個問題 – Ratha 2012-03-30 04:44:25

+0

你可以請發佈有關你提到的「長類路徑問題」的更多細節?堆棧跟蹤是一個CNF,我你的代碼示例的主要問題是不能工作,因爲引用是用於路徑的對象,而不是一個屬性,所以如果你幸運的話(取決於你的Ant版本),實際的路徑將作爲一個字符串值在temp中展開,那麼你不應該將它用作位置,但改爲使用path =「$ {temp}」屬性。 – 2012-03-30 16:51:11

+0

以下是問題所在 – Ratha 2012-03-30 17:08:52

相關問題