Не удается найти импорт Java в Eclipse? - PullRequest
2 голосов
/ 28 июня 2010

Я уже имел дело с подобными ошибками в Eclipse раньше, но понятия не имею, почему я получаю это на этот раз. У меня есть библиотека Apache Commons IO в моем пути сборки, а также в моей папке "lib".

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

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

О. Сожалею. Работал над несколькими вещами одновременно. Конечно, это будет проблема с муравьями.

Ok. Вот мой файл сборки. Что интересно, это работало в прошлом. Почему бы это не сработало сейчас?

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

1 Ответ

6 голосов
/ 28 июня 2010

Вы опубликовали вывод из Ant.

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

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


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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...