Comment Combiner Plusieurs Pots en Un seul?
J'ai lu de nombreux articles et explications sur le présent et le passé trop d'heures, mais tout est trop large ou spécifique.
Cette question s'applique seulement à une Applet que j'ai fait. Il contient une Classe, et nécessite 2 autres Jar bibliothèques. J'ai inclus dans ces projets (plusieurs projets, parce que j'ai essayé ceci dans Netbeans et Eclipse...il est facile de recréer un projet de Classe). Le point de tout cela est que mon code HTML/web projet ne devrait pas avoir à traiter avec plus d'un Pot ou d'une référence. Ce n'est pas compliqué, l'applet/projet à tous.
À l'origine, je l'ai fait dans Netbeans. Il a le paquet, et après l'ajout des 2 Pots, ils sont mis dans un "Bibliothèques" (les "ressources" du dossier). Après la construction, Netbeans crée un Pot pour mon un paquet de classe, et met ensuite les 2 autres bibliothèques dans un "lib", à côté d'elle. Je voudrais qu'ils soient dans un, distribuable Jar. De nombreuses choses que j'ai regardé à travers, j'ai essayé de mettre la suite dans build.xml:
<target name="YourBigJar" depends="-post-jar">
<jar destfile="dist/BigJar.jar">
<zipfileset src="dist/cxapplet.jar"/>
<zipfileset src="resources/dpotapi.jar"/>
<zipfileset src="resources/dpotjni.jar"/>
</jar>
</target>
Mais il ne produit rien. J'ai obtenu ce à partir de NetBeans - le déploiement de toutes les dans un bocal . Je ne sais pas/comprendre comment l'utiliser build.xml, donc je ne serais pas surpris si quelque chose ne va pas (évidemment), mais je n'obtiens pas d'erreur/messages d'avertissement.
Quand je l'ai fait dans Eclipse, il combine efficacement, mais lorsque j'utilise le Pot dans mon projet web, il dit qu'il ne trouve pas les classes à partir de la 2 autres Pots. Je ne comprends pas comment résoudre le problème, mais est-ce un problème de Classpath? Dans Eclipse, je fais un nouveau répertoire appelé "lib" et mettre les Pots dans le. Ensuite, je cliquez-droit sur le projet, allez dans "Java Build Path", et d'ajouter les Pots, également de la vérification en vertu de l'Ordre "et d'Exportation" de l'onglet. De choses que j'ai lues, je cliquez-droit sur le projet, cliquez sur "Exporter", choisissez "Pot", décochez la case ".classpath" et ".projet" les fichiers, seulement vérifier l'Exportation "a généré les fichiers de classe et des ressources", puis lui permettre de générer le fichier de manifeste. Comme je l'ai dit, cela génère un Bocal, mais son contenu de mon colis et ensuite un "lib", qui a les 2 autres Pots. Le Manifeste est là, mais c'est assez vide et ne faisant pas référence à tous les fichiers (pas sûr si c'est important). Quand je l'ai mis dans mon application web, elle explique l'applet ne peut pas trouver les autres classes.
Il semble donc simple - un paquet de classe, deux Pots...combiner en un seul Pot lors de la construction pour la distribution sous forme d'applet. Des idées?
Mise à JOUR:
Depuis que nous avons commencé à l'aide de Maven, quelqu'un a regardé dans l'aide d'un plugin Maven. Nous avons donc fini la création d'un nouveau projet de maison de l'applet (car il est utilisé dans plusieurs projets), et utilisé dans notre pom.xml
, à la fin:
<build>
<resources>
<resource>
<directory>${basedir}/applet</directory>
<excludes>
<exclude>codesignstore</exclude>
</excludes>
</resource>
<resource>
<directory>${basedir}/src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-5</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<finalName>cxapplet</finalName>
<archive>
<index>true</index>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</manifest>
</archive>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
<executions>
<execution>
<id>make-my-applet-jar</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jarsigner-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<id>sign</id>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
<configuration>
<keystore>${basedir}/applet/codesignstore</keystore>
<alias>codesigncert</alias>
<storepass>HIDDEN</storepass>
<keypass>HIDDEN</keypass>
</configuration>
</plugin>
</plugins>
</build>
Et c'était agréable car il nous a permis d'utiliser notre Certificat de Signature de Code pour vous connecter automatiquement aussi.
De son mieux pour rendre les dépendances d'un pot à l'autre.De nombreux jar outils de prise de rend votre travail plus facile.
Je ne suis pas sûr de ce que tu veux dire, mais c'est pourquoi je suis en train d'utiliser Netbeans et Eclipse de construire des outils, dont je pensais qu'ils le feraient, pour accomplir cette tâche.
Donc ma principale raison de poser cette question c'est parce que je vais avoir des problèmes de connexion, les Bocaux et le navigateur conscients de cette nécessité. Je sais, la première étape devrait avez été d'identifier le problème avec la signature, mais tout dans le Pot, si je extraire et de regarder à travers elle, l'air bien, c'est pour ça que je m'inquiète un peu avec plusieurs Pots. Vous ne savez pas si c'est la cause réelle, mais je pensais que ça pourrait être mieux et, éventuellement, si je mélangez le tout
Je ne parle pas d'IDE, mais jar outil de prise,google
OriginalL'auteur Ian | 2013-01-16
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, permettez-moi de dire qu'il n'y a vraiment aucune raison de combiner les pots - vous pouvez déployer une applet à l'aide de votre fichier de classe (pas dans un bocal) et de ses dépendants des bocaux.
Toutefois, si vous sentez que vous devez faire un gros pot de votre classe et de toutes ses dépendances, alors vous pouvez le faire.
Vous ne pouvez pas mettre les fichiers jar dans un autre fichier jar, cependant que les fichiers jar ne fonctionnent pas de cette façon.
Ce que vous avez besoin est pour tout le contenu de tous les fichiers jar être extraite, puis zippée à nouveau dans un bocal.
Si vous allez pour ce faire, je vous recommande d'utiliser le Maven outil de génération pour le faire.
Une fois que vous configurez votre build avec Maven, vous pouvez configurer le Maven Assembly Plugin de construire un gros pot pour vous.
Je sais que Eclipse prend en charge Maven, et je suppose que NetBeans ne.
OriginalL'auteur GreyBeardedGeek
À partir de la base de votre répertoire bin, pourquoi ne pas essayer:
Placer vos fichiers jar externes dans l'emplacement approprié dans votre
bin
répertoire, et manuellement bocal de vos fichiers de classe externes des fichiers jar.Vous pouvez également consulter ce fil qui pourrait fournir plus d'informations pour vous.
bin
répertoire est ma Classe principale du code compilé (par l'intermédiaire de son emballage), alors comment aurais-je inclure des choses dans lelib
répertoire (à côté debin
), qui sont les deux à l'extérieur des Pots, et d'en extraire/combiner avec lesbin
contenu du répertoire?(Je suis en train de faire cela à partir de la mémoire de quelque chose que j'ai essayé il ya 4 mois). Il suffit de copier votre dossier lib dans votre build dir après la construction du projet. Aussi, voir mon editted réponse.
Punaise, je ne sais pas pourquoi je n'ai pas pensé à le faire. Alors, quand je l'ai essayé, il ne se combiner entre eux, mais il met tout simplement les deux Bocaux dans la racine du nouveau Pot...mais il semble que ce que j'ai vraiment besoin, c'est d'extraire tout le contenu de l'extérieur par les Pots puis zip tous de retour ensemble. Cela fait-il sens? Netbeans est en fait la même chose que ce que vous avez fourni, à l'exception également ajouté au classpath dans le fichier de manifeste, de sorte qu'ils sont reconnaissables (ou cependant que les œuvres).
OriginalL'auteur AerusDar