Question

J'utilise Enunciate pour créer un prototype d'API REST et doit inclure un fichier jar contenant du code personnalisé. une bibliothèque.

Mon script Ant ressemble à ceci:

<!--include all jars-->
<path id="en.classpath">
    <fileset dir="${lib}">
        <include name="**/*.jar" />
    </fileset>
</path>

<!--define the task-->
<taskdef name="enunciate" classname="org.codehaus.enunciate.main.EnunciateTask">
    <classpath refid="en.classpath" />
</taskdef>

<mkdir dir="${dist}" />

<enunciate dir="${src}" configFile="${basedir}/enunciate.xml">
    <include name="**/*.java" />
    <classpath refid="en.classpath"/>
    <export artifactId="spring.war.file" destination="${dist}/${war.name}" />
</enunciate>

Le problème est que mon fichier jar personnalisé est exclu du fichier WAR. Il est nécessaire de compiler les classes annotées enoncées afin que le fichier jar soit évidemment sur le chemin de classe au moment de la compilation, mais que énunciate ne parvient pas à l'inclure dans la distribution. J'ai également remarqué que plusieurs des bocaux nécessaires à Enunciate n'étaient pas inclus dans le fichier WAR.

Pourquoi sont-ils exclus et comment puis-je résoudre ce problème?

Était-ce utile?

La solution 2

Comme il se trouve que l'un des fichiers jar que nous essayons d'inclure a une dépendance répertoriée dans son fichier manifeste d'un fichier jar dont Enunciate dépend (freemarker). Enunciate exclut automatiquement freemarker et à première vue, il semble exclure automatiquement tout ce qui dépend de freemarker. Si nous supprimons freemarker de la liste des fichiers jar dépendants du fichier manifeste de notre code, cela fonctionne parfaitement.

Cependant; J'ai parlé avec le développeur principal d'Enunciate (Ryan Heaten) et il m'a assuré que ce n'est pas ce qui se passe. Y compris sa réponse ci-dessous:

  

Vraiment?!

     

Wow. Intéressant. Je ne peux pas expliquer   il; Enunciate ne regarde pas ce qui est   dans le manifeste afin de déterminer   quoi inclure dans la guerre, donc je suis   sorte de perplexe ici. Il pourrait aussi   avoir un comportement bizarre de fourmi (pas   y compris ce pot dans le   "en.classpath" référence pour certains   raison).

     

~ Ryan

Autres conseils

Je n'ai jamais utilisé énoncier, mais vous pouvez ajouter un bocal rapide à la guerre:

<jar jarfile="${dist}/${war.name}" update="true">
   <fileset dir="${lib}">
        <include name="**/*.jar" />
    </fileset>
</jar>

Remarque: vous souhaiterez probablement ajouter les fichiers JAR au répertoire WEB-INF / lib au lieu du répertoire racine.

Je suppose que énunciate fait le minimum pour interférer avec votre propre processus de construction, puisque vous savez mieux quoi mettre dans votre fichier jar.

Dans enunciate.xml, je lui dis de ne pas copier les bibliothèques elles-mêmes:

<webapp doLibCopy="false">

Puis, dans le fichier de construction ant à la fin de la tâche d’énoncement, je mets à jour la guerre (vous pouvez le faire pour mettre à jour les fichiers jar inclus / exclus, que vous ayez ou non copié les fichiers jar pour vous à l’étape ci-dessus):

<war destfile="build-output/{mywar}" update="true">
    <lib dir="WebContent/WEB-INF/lib">
        <include name="**/*.jar" />
    </lib>
    <lib dir="build-output">
        <include name="some_other.jar" />
    </lib>
</war>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top