2010-06-28 6 views
2

J'ai déjà traité des erreurs de ce genre dans Eclipse, mais je ne sais pas pourquoi je l'obtiens cette fois-ci. J'ai la librairie Apache Commons IO dans mon Build Path ainsi que dans mon dossier "lib".Vous ne trouvez pas Java Import dans Eclipse?

J'ai donné l'erreur ci-dessous. C'est assez simple.

[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 

Pourquoi ne peut-il pas importer la classe? Il est même suggéré que j'ajoute celui spécifique avec correction automatique d'Eclipse.

Merci beaucoup!

Justian

EDIT:

Oh. Pardon. J'ai travaillé sur plusieurs choses à la fois. Bien sûr, ce serait un problème Ant.

Ok. Voici mon fichier de construction. Ce qui est intéressant, c'est que cela a fonctionné dans le passé. Pourquoi cela ne fonctionnerait-il pas maintenant?

<?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: Pour toute personne qui a ce problème à l'avenir, ici était mon dossier de construction final:

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

Répondre

6

Vous Ant sortie de courant. À moins que vous n'intégriez Eclipse avec votre fichier build.xml, l'idée d'Eclipse du chemin de classe pour votre projet est complètement distincte et mutuellement exclusive du chemin de classe utilisé pour construire votre projet dans votre fichier build.xml. Solution: assurez-vous que votre fichier build.xml fait référence à la bibliothèque commons-io lors de la construction de vos classes.


Mise à jour: De l'build.xml snippet que vous avez posté, semble que vous essayez de compiler vos classes avec pas références classpath que ce soit. Vous devez indiquer à la tâche javac où trouver les références de la bibliothèque.

Voici un exemple d'utilisation de la tâche javac qui fait référence à un classpath déclaré ailleurs:

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

Ceci met en place une fourmi « chemin » qui fait référence à tous les fichiers se terminant par .jar dans le répertoire pointé par la propriété ${lib.dir}. Vous pouvez bien sûr modifier cela en fonction de vos besoins, par exemple si vous voulez simplement vous référer à certains fichiers jar nommés ou si vous avez plusieurs répertoires différents contenant vos bibliothèques.

+0

Merci pour le suivi, Matt. Seule question est où mettre en œuvre la deuxième partie du code que vous avez fourni dans mon fichier de construction? Je ne suis pas super avec Ant. Le fichier que je vous ai envoyé a été créé il y a plus d'un an. Merci! –

+0

La partie '' a juste besoin d'être déclarée n'importe où dans le fichier (je ne pense pas que Ant doive être déclarée avant d'être référencée), et mon exemple 'javac' devrait remplacer/compléter ce que vous avez déjà. –

Questions connexes