Aider avec des packages en java - importation ne fonctionne pas
Je suis un développeur C++ - pas un développeur java, mais pour obtenir ce code de travail...
J'ai 2 classes publiques qui sera utilisé par un autre produit. J'ai utilisé le package de la directive dans chacun des fichiers java.
package com.company.thing;
class MyClass ...
Lorsque j'essaie de compiler une application de test qui utilise des que j'ajoute
import com.company.thing.*;
Le compilateur javac échoue avec des erreurs à propos de com.la société n'existe pas. (même si je le compile dans le même répertoire que les fichiers de classe j'ai juste fait un paquet de)
Je suis sûr que je suis en train de faire quelque chose d'os à tête et stupide.
J'ai lu le http://java.sun.com/docs/books/tutorial/java/package/usepkgs.html pages et essayé de mettre en place une structure de répertoire comme /com/entreprise/chose etc, mais j'ai totalement vissé tout ou suis absent quelque chose d'autre.
MODIFIER
merci pour les suggestions, j'avais essayé le classpath précédemment. Cela n'aide pas.
J'ai essayé de compiler
javac -classpath <parent> client.java
et le résultat est:
package com.company does not exist
J'ai le code je veux importer (les deux fichiers java) dans \com\company\produit. Je compile les fines. (ils contiennent MyClass), j'ai même fait un fichier jar pour eux. J'ai copié le fichier jar jusqu'au répertoire parent.
Puis j'ai fait (dans le répertoire parent avec le client java fichier)
javac -cp <jarfile> *.java
le résultat est:
cannot access MyClass
bad class file: MyClass.class(:MyClass.class)
class file contains wrong class: com.company.product.MyClass
Please remove or make sure it appears in the correct subdirectory of the classpath.
MODIFIER
J'ai eu le code du client pour compiler et exécuter si j'ai utilisé le nom pleinement qualifié pour MyClass et compilé dans le répertoire parent. Je suis totalement confus maintenant.
compilé sans classpath ensemble - juste
javac *.java
dans le répertoire parent - et il a bien fonctionné.
Je peux obtenir une application de test pour compiler, mais qui ne va pas le couper, quand j'ai de l'intégrer dans le code de production. Toujours à la recherche de l'aide.
EDIT:
Enfin - je ne sais pas pourquoi ça ne marchait pas avant, mais j'ai nettoyé tous les fichiers dans la structure de répertoire et maintenant ça fonctionne.
Grâce
- Montrez-nous la mise en page exacte de vos fichiers (.java et plus important encore .de classe) et de ce que vous définissez votre chemin de classe pour. Alors montrez-nous le message d'erreur exact du compilateur. Sans que nous ne pouvons vous diriger vers des ressources génériques/tutoriels.
- J'ai donné le message d'erreur exact. Je ne peux pas poster mon code, malheureusement. Le générique de l'information que j'ai fournie est complète et juste remplacé mon nom de la société pour la "société"
- Je suppose que c'est un problème de classpath - mais aucun des suggestions de résoudre le problème.
Vous devez vous connecter pour publier un commentaire.
Ok, juste pour clarifier les choses qui ont déjà été posté.
Vous devriez avoir le répertoire
com
, contenant le répertoirecompany
, contenant le répertoireexample
, contenant le fichierMyClass.java
.À partir du dossier contenant
com
, exécutez:Alors:
Ceux-ci doivent à la fois être fait à partir de la racine de l'arborescence source. Sinon,
javac
etjava
ne sera pas en mesure de trouver d'autres paquets (en fait,java
ne serait même pas en mesure d'exécuterMyClass
).Un court exemple
J'ai créé les dossiers "testpackage" et "testpackage2". À l'intérieur de testpackage, j'ai créé TestPackageClass.java contenant le code suivant:
À l'intérieur de testpackage2, j'ai créé MyClass.java contenant le code suivant:
À partir du répertoire contenant les deux nouveaux dossiers, j'ai couru:
Alors:
Ne fait que rendre les choses plus clair?
Oui, c'est un problème de classpath. Vous devez indiquer au compilateur d'exécution et que le répertoire dans lequel votre .catégorie fichiers de vie fait partie du CLASSPATH. Le répertoire que vous devez ajouter est le parent de la "com" répertoire au début de votre structure de paquet.
Vous faire cette aide de l'option-classpath argument pour les deux javac.exe et java.exe.
Doit aussi se demander comment la 3e partie des classes que vous utilisez sont emballés. Si ils sont dans un BOCAL, et je vous recommande de les avoir dans une, vous devez ajouter les .fichier jar au classpath:
Google pour "chemin de classe Java". C'trouverez des liens comme cette.
Une chose de plus: "l'importation" n'est-ce pas le chargement des classes. Tout ce qu'il fait, il vous sauver de la frappe. Lorsque vous incluez une instruction d'importation, vous n'avez pas à utiliser pleinement résolu nom de la classe dans votre code, vous pouvez taper "Foo" au lieu de "com.de l'entreprise.chose.Foo". C'est tout ce qu'il fait.
On dirait que vous êtes sur la bonne voie avec votre structure de répertoire. Lorsque vous compilez le code dépendant, spécifiez le
-classpath
argument dejavac
. Utiliser le parent répertoire de lacom
répertoire, oùcom
, à son tour, contientcompany/thing/YourClass.class
Vous avez un tas de bonnes réponses, donc je vais juste jeter une suggestion. Si vous allez travailler sur ce projet pendant plus de 2 jours, téléchargement eclipse ou netbeans et de construire votre projet en y.
Si vous n'êtes normalement pas un programmeur java, puis l'aide qu'il vous donnera seront d'une aide inestimable.
Il n'en vaut pas la 1/2 heure de téléchargement/installation, si vous ne dépensez que 2 heures sur elle.
Les deux ont des touches de raccourci/éléments de menu à "Corriger des importations", avec cela, vous ne devriez jamais avoir à vous soucier des importations de nouveau.
Java standard chargeur de classe est à cheval sur la structure de répertoire. Chaque entrée dans le classpath est un répertoire ou un fichier jar (ou fichier zip, vraiment), qui cherche la classe donnée de fichier. Par exemple, si votre classe est ".;my.jar" il va rechercher com.exemple.Foo dans les emplacements suivants:
Qui est, il va chercher dans le sous-répertoire a la 'modifié le nom' du paquet, où". " est remplacé par le séparateur de fichiers.
Aussi, il est à noter que vous ne pouvez pas imbriquer .les fichiers jar.
Juste ajouter classpath ( je veux dire à vos parents emplacement de répertoire) sous Variables Système et les Variables Utilisateur menu ...
Suivre : Cliquez-Droit sur Mon Ordinateur>Propriétés>Avancé>Variables d'Environnement