ce qui est correct structure interne d'un fichier JAR
C'est vraiment une question bête que je ne peux pas imposer une amende à un difinitive réponse.
Arrière-plan.
Je suis à l'aide d'Eclipse (avec celui de la FOURMI, plugins, sur un XP terminal).
J'ai juste commencé à jouer avec les FOURMIS, dans le [jar] directive, je suis à la définition de l'emplacement de mon terminé fichier JAR et je reçois la suite quand j'ai décompresser le fichier
META-INF/MANIFEST.MF
MyMainFile.class
ce qui est cohérent avec celui trouvé sur le site web d'oracle pour la structure interne.
(ici http://docs.oracle.com/javase/tutorial/deployment/jar/view.html )
Mais lorsque j'essaie d'exécuter mon fichier j'obtiens une " classe principale pas trouvé d'erreur ?
J'en ai vu d'autres posts où les gens ont "décompressé" le fichier JAR et a terminé avec une structure de la suite...
META-INF/MANIFEST.MF
dtvcontrol/DTVControlApp.class
(à partir d'ici http://www.coderanch.com/t/528312/java/java/standalone-application)
Donc dois-je obtenir une structure où mes fichiers de classe sont dans un répertoire qui reflète le nom du paquet... par exemple
META-INF/MANIFEST.MF
MyPackage/MyMainFile.class
et si oui, pourquoi suis-je le mauvais structure à l'aide de la FOURMI, ou pourquoi il y a 2 différents "correct" des structures internes? (comment specifify principal de la classe et du chemin de classe pour chaque /contrôle de ce que je reçois)
Également dans le cas où vous êtes intéressé, dans le fichier MANIFESTE unis (build en utilisant ANT)
[attribute name="Principal-Classe" value="MyPackage.MyMainFile"/]
Également la structure de répertoire du paquet en cours de développement se présente comme suit...
/JavaDev/MyTestPackage/src (contient les fichiers source)
//JavaDev/MyTestPackage/bin (contient les fichiers de classe à partir d'eclipse, ou de la FOURMI JAVAC tâche, j'ai nommé de façon incorrecte? si j'ai appelé il construire ? )
De plus, lorsque je crée le pot je ne suis pas nommant "MyTestPackage.jar" mais tout simplement "test.jar' cela pourrait-il être la cause du problème? Je suppose que pas que si j'ai bien compris qu'est ce que le [principal de la classe] définition des choses est tout au sujet.
Plus de tout cela...
'MyTestPackage' est effectivement une petite erreur visuelle de messagerie de la bibliothèque que j'utilise d'ailleurs, et j'ai un deuxième fichier qui a une classe principale à utiliser pour le test. En tant que tel, il indique un certain nombre de bibliothèques (ai-je besoin pour copier tous les SWT bibliothèques dans un répertoire spécifié?)
J'ai lu quelque part que si je charger des bibliothèques dans ma classe principale (dont je n'ai évidemment pour ouvrir la fenêtre), puis essayez d'exécuter le programme échoue sur une "classe principale pas trouvé de" si je le les utiliser, même chose est également vrai pour l'ajout de quelque 'static final" des membres (que j'utilise pour le loggin d'erreurs).
'Static Final" problème...
J'ai essayé d'ajuster le chemin de la FOURMI, et je reçois une charge d'autres erreurs pour la connexion à Log4J et mon 'wrapper' que j'utilise (à faire avec elle être un mauvais importation), mais les bibliothèques sont là où ils devraient tel que défini dans le classpath).
Je me sens comme je suis presque là.... mais pas tout à fait...
Je fais ceci pour la petite bibliothèque des projets que je suis en train de créer avec l'intention de les utiliser MAVAN pour le principal de l'emballage extérieur qui permettra de relier entre eux tous ensemble... pour l'instant mais je veux juste obtenir ce que ça va alors que ça fonctionne.
Je peux fournir la source, ou toute autre information que nécessaire.
Merci d'avance...
David
OriginalL'auteur DaveM | 2012-04-02
Vous devez vous connecter pour publier un commentaire.
C'est simple quand vous savez où chercher. Dire que votre META-INF/MANIFEST.MF contient la ligne:
la structure du pot doit être
où MyMainFile doit être dans le bon package:
Votre message d'erreur est provoqué par MyMainFile en étant au mauvais endroit.
Edit: il a été un moment depuis la dernière fois que je l'ai fait avec ant, mais je pense que vous avez besoin de quelque chose comme ceci: un fichier source de la structure qui reflète le paquet struture, dire
et un répertoire de mettre de la classe compilée fichier, disons
(Je suis en utilisant maven conventions ici, la fourmi n'est pas en charge et vous pouvez utiliser le (clic droit)->propriétés->Java Build path->onglet Sources dans eclipse pour définir la source dir de src/main/java et la cible target/classes). Puis en ant, ont une cible de compilation qui compile à partir de la source à la cible:
de sorte que, après
ant compile
vous devriez voir le fichier de classe dans la cibleAlors une fourmi pot de tâches que les paquets ceci:
Après avoir dit
ant compile jar
vous devez avoir un fichier MyJarFile.jar à l'intérieur de la cible etdoit exécuter la méthode main.
wallenborn actuellement dans mon "compiler" je suis pointant vers un un destfile="${classe}" et class = "build" , donc est-ce là mon problème?? Je vais le changer et voir ce qui se passe...
Dans la compilation de la tâche, destfile est probablement trop précis, de toute façon. En gros, vous ne voulez dire que la compilation de la tâche: prendre tout dans ce répertoire src, de manière récursive, le compiler et d'écrire les classes obtenues dans cette dest répertoire, la préservation des sous-répertoires.
OK... je pense que je vais quelque part. J'ai créé un autre "hello world" du projet, et il compile et fonctionne très bien. Toutes les compiler et construire des trucs JAR des choses est le même (avec juste les emplacements des fichiers différents en raison d'une autre répertoire parent. De ce que je peux voir le problème est que la / / build/classes répertoire a pas de contenu dans mon projet d'origine, mais dans mon "hello World" ... j'ai juste essayé de copier les fichiers et descovered que j'étais "nettoyage" mes fichiers dans 2 endroits... donc problème résolu. Merci
OriginalL'auteur wallenborn