Package et exécuter une application Java avec dépendances de printemps

voix
5

Je construit une application Java autonome qui a un tas de dépendances (Apache Commons libs, etc) ainsi que d'une dépendance à l'égard du cadre de printemps, ce qui a un tas de dépendances.

J'ai construit ce dans Eclipse, où il fonctionne très bien. Maintenant, je dois déployer à la production et donc je suis en train de trouver la meilleure façon de le paquet avec toutes les dépendances et aussi comment appeler même la chose (il sera appelé à partir de la ligne de commande).

La façon dont la force brute serait d'exporter mon projet comme un pot, trouver tous les pots dépendants (et leurs dépendances!), Les copier dans un répertoire commun, écrire un script shell qui inclut tous sur le chemin de classe et l'exécuter. Il est évident que cela semble stupide et fastidieux.

Dois-je utiliser Ant, Maven? Dois-je emballer tous les pots de printemps dépendants dans un grand dossier? Des conseils sur la face à ce serait utile.

Créé 19/02/2009 à 08:26
utilisateur
Dans d'autres langues...                            


10 réponses

voix
4

Java déploiement est toujours stupide et fastidieux en 2009. Donc , l'option habituelle est d'écrire ce petit script. Si vous mettez tous vos fichiers JAR dans un répertoire ( par exemple, lib\), vous pouvez utiliser un script commun qui construit le classpath automatiquement (voir cette entrée de blog ). Je suggère d'ajouter un cd /d %~dp0au début de cd dans le répertoire du script.

Maven 2 a un plugin qui peut assembler votre application dans un "super JAR" ( assemblage mvn: assemblage ). Cela fonctionne à moins que vous utilisez le pilote JCC DB2 (qui contient « COM.ibm. Paquets qui se convertissent à com.ibm ». -> ClassNotFoundException).

La dernière solution, si vous avez déjà un ANT build.xml qui fonctionne, est de déballer tous les fichiers JAR dépendants et de créer vous-même « super JAR ».

Créé 19/02/2009 à 08:43
source utilisateur

voix
1

Nous avons trouvé que la meilleure solution pour la gestion de la dépendance et l' emballage est d'utiliser Maven avec l' Assemblée plugin. Cela fournit un moyen très élégant pour vous emballer des projets, ainsi que toutes les dépendances d'exécution et le soutien des scripts dans une distribution binaire. L' un des plus grands avantages de l' utilisation des ensembles est qu'il est possible de diviser vos projets en composants distincts selon la nécessité. Si vous utilisez Spring Integration vous son tout à fait commun ont des composants séparés pour être répartie sur plusieurs machines. Le plug - in de montage vous permet de configurer ceci à vos besoins.

Créé 19/02/2009 à 08:44
source utilisateur

voix
0

Vous pouvez utiliser un lanceur qui définit correctement le classpath. Ensuite, vous aurez beaucoup plus de flexibilité pour emballer vos fichiers JAR. Vous pouvez facilement les mettre tous dans un répertoire, ce qui est beaucoup plus propre que la création d'un « bâtard » pot ueber ...

L' un de ces lanceurs est commons-lanceur .

Créé 19/02/2009 à 08:50
source utilisateur

voix
2

Avec Ant, vous pouvez faire quelque chose le long de ce qui suit:

  1. Groupe dépendances tous ensemble.
  2. Empaqueter un fichier JAR avec votre application, et les références embed aux dépendances dans le MANIFEST.MF fichier avec le -Directive, « Class-Path » à l'intérieur du pot. Cela devrait éliminer la nécessité de la construction du chemin de classe au moment du lancement.
  3. Regroupez tous ensemble comme une archive, et le distribuer. Il devrait être suffisant pour faire tourner le pot directement avec « java -jar your.jar ».

Pour la gestion de vos dépendances, vous pouvez aller avec Ivy . Tout comme Maven, il est capable de récupérer les dépendances au moment de la construction de dépôts selon votre configuration, y compris les dépôts de Maven ou votre propre référentiel privé.

Créé 19/02/2009 à 09:16
source utilisateur

voix
0

Nous utilisons Maven 2 avec m2eclipse plug - in; fonctionne assez bien. Plugin a une vue graphique de la dépendance, montrera des conflits , etc.

Maintenant, si vous voulez emballer tous vos dépendances dans le seul pot, vous pouvez consulter Liens Jar Jar (sans blague!).

Créé 19/02/2009 à 23:01
source utilisateur

voix
0

Beaucoup de vos préoccupations disparaître si vous faites votre exécutable JAR et ajoutez un manifeste notamment ClassPath. Vous ne devez ZIP JAR et ses dépendances ensemble, malheureusement, mais vos problèmes CLASSPATH sont pris en charge.

Qu'en est-il de créer un faisceau de OSGi? Je ne l'ai pas regardé en moi-même encore, mais il est censé être la prochaine chose pour l'emballage des applications Java. Il est utilisé dans les serveurs d'applications comme serveur dm Spring. Peut-être que cela peut vous aider.

Créé 21/02/2009 à 13:22
source utilisateur

voix
0

Dans mon script de compilation ANT, je produis le * .bat et * les scripts de démarrage .sh avec la liste des Jarres construites dynamiquement au moment de la construction en fonction du contenu de lib dir la construction.

Par exemple, pour créer la liste des bocaux avec des séparateurs appropriés:

<path id="jar-classpath">
    <fileset dir="${build.war.dir}/WEB-INF/lib">
        <include name="**/*.jar" />
    </fileset>
</path>

<pathconvert refid="jar-classpath" targetos="unix" property="exec.classpath.unix">
       <map from="${build.war.dir}\WEB-INF\lib\" to="../lib/"/>
</pathconvert>

<pathconvert refid="jar-classpath" targetos="windows" property="exec.classpath.windows">
        <map from="${build.war.dir}\WEB-INF\lib\" to="../lib/"/>
</pathconvert>

Vous pouvez ensuite utiliser ${exec.classpath.unix}et ${exec.classpath.windows}valeurs dans les scripts d'invocation java.

Créé 21/02/2009 à 13:41
source utilisateur

voix
1

Tout cet amour Maven et personne ne vous parle Ivy? Oh cher!

Eh bien, voici Ant Ivy et ici par rapport à Maven2 . S'il vous plaît jeter un oeil à trop avant d' aller avec presque tout le monde suggère.

Créé 21/02/2009 à 14:00
source utilisateur

voix
0

Le plugin-maven-assemblage peut ne pas être le meilleur choix. Vous devriez jeter un oeil à la onejar-maven-plugin, comme décrit ici:

http://blog.jayway.com/2009/03/22/executable-jar-with-onejar-maven-plugin/

Il permet à tous vos pots de dépendance restent des pots, et votre code est dans son propre pot. Tous ces pots sont placés dans un plus grand pot, qui est rendu exécutable.

Créé 17/04/2009 à 05:43
source utilisateur

voix
0

Vous pouvez également utiliser Gradle et voici comment vous pouvez le faire là-bas:

mainClassName = "my.App"

task runnableJar(type: Jar, dependsOn: [':assemble']) {
    from files(sourceSets.main.output.classesDir)
    from files(sourceSets.main.output.resourcesDir)
    from configurations.runtime.asFileTree.files.collect { zipTree(it) }

    manifest {
        attributes 'Main-Class': mainClassName
    }
}
Créé 24/04/2017 à 23:17
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more