2010-02-23 5 views
4

J'ai un pot appelé "MyTools". Le fichier jar est dans le dossier c: \ data. J'ai créé un nouveau fichier dans le même dossier appelé "UseTools.java". Maintenant, je voudrais utiliser certaines des classes de MyTools.jar dans mon UseTools.java. J'ai essayé cela, mais il ne semble pas travailler:Comment utiliser les fichiers jar sans informations sur le paquet?

import MyTools.*;  
public class UseTools 
{ 
    public static void main(String[] args) 
    { 
    MyTools.SomeClass foo = new SomeClass(); 
    SomeClass.doSomething(); 
    } 
} 

J'ai essayé de compiler ce avec:

javac -cp . UseTools.java 

et reçu ce message d'erreur:

UseTools.java:1: package MyTools does not exist 
import MyTools.*; 
^ 
UseTools.java:7: package MyTools does not exist 
     MyTools.SomeClass foo = new SomeClass() 
            ^
2 errors 

Je n'ai pas mis le paquet nom dans n'importe quelle classe.

Dois-je définir un nom de package dans mes classes jar?

+0

Pouvez-vous exécuter 'jar -tf MyTools.jar' sur la ligne de commande et publier la sortie? Peut-être que votre pot n'est pas emballé correctement. – karoberts

+0

J'ai créé le pot en utilisant netbeans. quand je fais un -tf, il retourne un dossier META-INF et le SomeClass.class dans la racine. – vikasde

+0

les premiers noms de paquets en Java devraient être tous en minuscules. les noms de classe doivent être CamelCase. –

Répondre

0

Vous devez ajouter -cp file.jar au lieu de -cp.

Ce dernier ne récupère que les fichiers .class. BTW: pourquoi ne pas utiliser un IDE comme netbeans, eclipse ou intelliJ?

+0

J'ai essayé mais obtenir la même erreur "Package n'existe pas": javac -cp MyTools.jar UseTools.java – vikasde

1

Dans votre fichier MyTools.jar, il doit y avoir un package avec le nom MyTools. Et avant de compiler vous devriez ajouter le jar au classpath.

+0

ok et quand je l'exécute en utilisant java, dois-je toujours inclure le jar dans mon classpath? – vikasde

+0

Si vous exécutez la commande console, le chemin de classe que vous avez défini existera jusqu'à ce que vous fermiez la console, donc si vous exécutez la même console que celle où vous avez défini le chemin de classe lors de la compilation, il est inutile de le redéfinir. – GuruKulki

3

Pour mentionner quelque chose qui se rapporte davantage au titre de la question: En Java, vous ne pouvez pas accéder aux classes du package par défaut à partir du code d'un package nommé. Cela signifie que si les classes de votre fichier jar n'appartiennent explicitement à aucun package et que celles-ci se trouvent directement dans le dossier racine sans sous-dossiers, elles se trouvent dans le package par défaut. Ce n'est pas très élaboré et manque de modularité ainsi que d'extensibilité, mais il est techniquement correct. Ensuite, vous pouvez uniquement utiliser ces classes à partir du code qui se trouve également dans le package par défaut. Mais cela ne signifie pas nécessairement qu'il doit être dans le même pot. Si vous avez plusieurs dossiers src ou classe, ils peuvent tous contenir des classes du package par défaut qui peuvent interagir. L'organisation des fichiers JAR et la structure du package dans votre projet sont indépendantes les unes des autres.

Cependant, je vous encourage fortement à utiliser des informations de package explicites.

Questions connexes