2010-06-28 85 views
2

我以前在Eclipse中處理過這樣的錯誤,但我不知道爲什麼我這次得到它。我在Build Path以及我的「lib」文件夾中都有Apache Commons IO庫。在Eclipse中找不到Java導入?

我給出了下面的錯誤。這非常簡單。

[javac] Compiling 3 source files to C:\Users\Justian\workspaces\ConnectionCompiler\build 
[javac] C:\Users\Justian\workspaces\ConnectionCompiler\src\jab\jm\readers\ExcelReader.java:5: package org.apache.commons.io does not exist 
[javac] import org.apache.commons.io.FileUtils; 
[javac]       ^
[javac] C:\Users\Justian\workspaces\ConnectionCompiler\src\jab\jm\readers\FileManager.java:5: package org.apache.commons.io does not exist 
[javac] import org.apache.commons.io.FileUtils; 
[javac]       ^
[javac] C:\Users\Justian\workspaces\ConnectionCompiler\src\jab\jm\readers\FileManager.java:12: cannot find symbol 
[javac] symbol : variable FileUtils 
[javac] location: class jab.jm.readers.FileManager 
[javac]   return FileUtils.convertFileCollectionToFileArray(FileUtils.listFiles(
[javac]               ^
[javac] C:\Users\Justian\workspaces\ConnectionCompiler\src\jab\jm\readers\FileManager.java:12: cannot find symbol 
[javac] symbol : variable FileUtils 
[javac] location: class jab.jm.readers.FileManager 
[javac]   return FileUtils.convertFileCollectionToFileArray(FileUtils.listFiles(
[javac]    ^
[javac] 4 errors 

爲什麼不能導入類?甚至建議我使用Eclipse的自動更正來添加特定的一個。

非常感謝!

瑞斯蒂昂

編輯:

哦。抱歉。一次處理多件事。當然這將是一個Ant問題。

好的。這是我的構建文件。有趣的是,這在過去有效。爲什麼現在不行?

<?xml version="1.0" ?> 

<project name="ServerJar" default="dist" basedir="."> 
    <description> 
     Builds client files into .jar 
    </description> 
    <!-- [build variables] --> 
    <property name="src" location="src" /> 
    <property name="build" location="build" /> 
    <property name="dist" location="dist" /> 

    <target name="init"> 
     <!-- makes time stamp to be used in jar name --> 
     <tstamp /> 
     <!-- creates build directory structure --> 
     <mkdir dir="${build}" /> 
    </target> 

    <target name="compile" depends="init" description="Compiles the source"> 
     <!-- compiles the java code from ${src} into ${build} --> 
     <javac srcdir="${src}" destdir="${build}" /> 
    </target> 

    <target name="dist" depends="compile" description="Generates distributable"> 
     <!-- creates the distribution directory --> 
     <mkdir dir="${dist}/lib" /> 

     <!-- puts everything in ${build} into the jar file --> 
     <jar jarfile="${dist}/lib/CC-${DSTAMP}.jar" basedir="${build}"> 
      <manifest> 
       <attribute name="Main-Class" value="jab.jm.Test" /> 
      </manifest> 
     </jar> 

     <!-- makes a jar file for quick test execution --> 
     <jar jarfile="${dist}/lib/CC.jar" basedir="${build}"> 
      <manifest> 
       <attribute name="Main-Class" value="jab.jm.Test" /> 
      </manifest> 
     </jar> 
    </target> 

    <target name="clean" description="Cleans up the extra build files"> 
     <!-- deletes the ${build} and ${dist} directories --> 
     <delete dir="${build}" /> 
     <delete dir="${dist}" /> 
    </target> 
</project> 

編輯: 任何人誰在未來有這個問題,這是我最後的build文件:

<?xml version="1.0" ?> 

<project name="ServerJar" default="dist" basedir="."> 
    <description> 
     Builds client files into .jar 
    </description> 
    <!-- [build variables] --> 
    <property name="src" location="src" /> 
    <property name="build" location="build" /> 
    <property name="dist" location="dist" /> 
    <property name="lib" location="lib" /> 
    <!-- [path to packages] --> 
    <path id="master-classpath"> 
     <fileset dir="${lib}"> 
      <include name="*.jar"/> 
     </fileset> 
    </path> 


    <target name="init"> 
     <!-- makes time stamp to be used in jar name --> 
     <tstamp /> 
     <!-- creates build directory structure --> 
     <mkdir dir="${build}" /> 
    </target> 

    <target name="compile" depends="init" description="Compiles the source"> 
     <!-- compiles the java code from ${src} into ${build} --> 
     <!-- <javac srcdir="${src}" destdir="${build}" /> --> 
     <javac destdir= "${build}"> 
      <src path="${src}"/> 
      <classpath refid="master-classpath"/> 
     </javac> 
    </target> 

    <target name="dist" depends="compile" description="Generates distributable"> 
     <!-- creates the distribution directory --> 
     <mkdir dir="${dist}/lib" /> 

     <!-- puts everything in ${build} into the jar file --> 
     <jar jarfile="${dist}/lib/CC-${DSTAMP}.jar" basedir="${build}"> 
      <manifest> 
       <attribute name="Main-Class" value="jab.jm.Test" /> 
      </manifest> 
     </jar> 

     <!-- makes a jar file for quick test execution --> 
     <jar jarfile="${dist}/lib/CC.jar" basedir="${build}"> 
      <manifest> 
       <attribute name="Main-Class" value="jab.jm.Test" /> 
      </manifest> 
     </jar> 
    </target> 

    <target name="clean" description="Cleans up the extra build files"> 
     <!-- deletes the ${build} and ${dist} directories --> 
     <delete dir="${build}" /> 
     <delete dir="${dist}" /> 
    </target> 
</project> 

回答

6

您發佈從螞蟻輸出。

除非您以某種方式將Eclipse與您的build.xml文件集成在一起,否則Eclipse爲您的項目提供的類路徑思路與用於在build.xml中構建項目的類路徑是完全分離的並且互斥。

解決方案:確保您的build.xml在構建類時引用了commons-io庫。


更新:從build.xml文件片斷你張貼,貌似你試圖用沒有 classpath中引用任何編譯你的類。您需要告知javac任務在哪裏查找庫引用。

下面是使用javac任務,指的是類路徑的例子在其他地方宣佈:

<path id="master-classpath"> 
    <fileset dir="${lib.dir}"> 
     <include name="*.jar"/> 
    </fileset> 
</path> 

<javac destdir="${classes.build.dir}"> 
    <src path="${src.dir}"/> 
    <classpath refid="master-classpath"/> 
</javac> 

此設置是指在.jar結束目錄指向每個文件的Ant「路徑」 ${lib.dir}屬性。你當然可以改變它以適應你的需要,例如你只想引用某些指定的jar文件或者你有幾個不同的目錄包含你的庫。

+0

感謝您的跟進,馬特。 唯一的問題是在哪裏實現你提供給我的構建文件的代碼的第二部分? 我對Ant並不是很了不起。我寄給你的文件是在一年前完成的。 謝謝! – 2010-06-28 15:54:26

+0

''部分只需要在文件中的任何位置聲明(我不認爲Ant要求它在被引用之前聲明它),並且我的'javac'示例應該替換/補充您已有的部分。 – 2010-06-28 16:23:08