2010-06-28 3 views
2

Раньше я имел дело с такими ошибками в Eclipse, но я понятия не имею, почему я получаю его на этот раз. У меня есть библиотека IO Apache Commons в моем пути сборки, а также в моей папке «lib».Не удается найти Java-импорт в Eclipse?

Я привел приведенную ниже ошибку. Это довольно просто.

[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.

Большое спасибо!

Жюстьян

EDIT:

О. Сожалею. Работал сразу над несколькими вещами. Конечно, это проблема 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> 

EDIT: Для тех, кто имеет эту проблему в будущем, здесь был мой последний файл сборки:

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

Вы писали вывод из Ant.

Если вы каким-то образом не интегрируете Eclipse с вашим файлом build.xml, идея Eclipse о пути к классу для вашего проекта полностью разделена и взаимно исключается из класса, используемого для создания вашего проекта в файле build.xml.

Решение: убедитесь, что ваш build.xml ссылается на библиотеку commons-io при создании ваших классов.


Update: Из build.xml фрагмента кода вы опубликовали, выглядит, как вы пытаетесь скомпилировать классы не ссылок пути к классам вообще. Вы должны указать задачу 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> 

Это настраивает Ant «путь», который ссылается на каждый файл, заканчивающийся в .jar в каталоге, на который указывает ${lib.dir} Недвижимость. Вы можете, конечно, изменить это в соответствии с вашими потребностями, если, например, вы хотите только обратиться к определенным файлам с именем jar или у вас есть несколько разных каталогов, содержащих ваши библиотеки.

+0

Спасибо за последующее рассмотрение, Мэтт. Вопрос только в том, где реализовать вторую часть кода, который вы предоставили в моем файле сборки? Я не так хорош с Ant. Файл, который я вам отправил, был сделан более года назад. Спасибо! –

+0

'' 'часть просто должна быть объявлена ​​в любом месте файла (я не думаю, что Ant требует, чтобы она была объявлена ​​до ее ссылки), а мой пример' javac' должен заменить/дополнить то, что у вас уже есть. –

Смежные вопросы