2010-06-28 51 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