代码之家  ›  专栏  ›  技术社区  ›  Justian Meyer

在Eclipse中找不到Java导入?

  •  2
  • Justian Meyer  · 技术社区  · 14 年前

    我以前在Eclipse中处理过类似这样的错误,但我不知道为什么这次会这样。我的构建路径和“lib”文件夹中都有apachecommons IO库。

    我在下面给出了错误。这很简单。

    [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的auto-correct添加一个特定的。

    非常感谢!

    编辑:

    好 啊。这是我的构建文件。有趣的是,这在过去是有效的。为什么现在不行?

    <?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>
    

    编辑: 对于将来遇到此问题的任何人,以下是我的最终构建文件:

    <?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>
    
    1 回复  |  直到 10 年前
        1
  •  6
  •   matt b    14 年前

    你发布了Ant的输出。

    除非您以某种方式将Eclipse与build.xml文件集成,否则Eclipse对项目的类路径的概念与build.xml中用于构建项目的类路径是完全独立的,并且是互斥的。

    解决方案:在构建类时,确保build.xml引用commons io库。


    更新: 从您发布的build.xml片段来看,似乎您正在尝试使用 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>
    

    这将建立一个Ant“路径”,它引用以 .jar ${lib.dir}