Pregunta

Estoy usando Enunciate para crear una API de REST de prototipo y necesito incluir un contenedor que contenga código personalizado como una biblioteca.

Mi secuencia de comandos de Ant se ve así:

<!--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>

El problema es que mi tarro personalizado se está excluyendo del archivo WAR. Es necesario compilar las clases anotadas enunciadas para que el archivo jar esté obviamente en el classpath en el momento de la compilación, pero enunciate no pueda incluirlo en la distribución. También he notado que varios de los tarros necesarios para enunciar no se incluyen en el archivo WAR.

¿Por qué se están excluyendo y cómo puedo solucionarlo?

¿Fue útil?

Solución 2

Resulta que uno de los frascos que intentamos incluir tiene una dependencia que se encuentra en su archivo de manifiesto de un frasco del que Enunciate depende (freemarker). Enunciate excluye automáticamente a freemarker y, a primera vista, parece que excluye automáticamente todo lo que también depende de freemarker. Si eliminamos freemarker de la lista de archivos dependientes en el archivo de manifiesto de nuestro código, funcionará bien.

Sin embargo; He hablado con el desarrollador principal de Enunciate (Ryan Heaten) y me asegura que esto no es lo que está sucediendo. Incluyendo su respuesta a continuación:

  

¿De verdad ?!

     

Wow. Interesante. No puedo explicar   eso; Enunciate no mira lo que hay.   en el Manifiesto para determinar   Qué incluir en la guerra, así que estoy   tipo de perplejo aquí. También podría   ser un extraño comportamiento de hormiga (no   incluyendo ese tarro en el   " en.classpath " referencia para algunos   razón).

     

~ Ryan

Otros consejos

Nunca usé enunciate, pero como un truco rápido puedes agregar los frascos a la guerra:

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

Nota: probablemente desee agregar los frascos al directorio WEB-INF / lib , en lugar del directorio raíz.

Supongo que enunciate hace el mínimo para interferir con tu propio proceso de compilación, ya que sabes mejor qué poner dentro de tu archivo jar.

En enunciate.xml le digo que no copie ninguna biblioteca en sí:

<webapp doLibCopy="false">

Luego, en el archivo de compilación ant al final de la tarea de enunciado, actualizo la guerra (puedes hacer esto para actualizar los archivos comprimidos incluidos / excluidos si tienes o no Enunciate, copia los archivos en el paso anterior):

<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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top