Domanda

Sto usando Enunciate per costruire un prototipo di API REST e devo includere un vaso contenente codice personalizzato come una biblioteca.

My Ant Script è simile al seguente:

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

Il problema è che il mio barattolo personalizzato viene escluso dal file WAR. È necessario compilare le classi annotate enunciate in modo che il vaso sia ovviamente sul percorso di classe al momento della compilazione ma enunciate non riesce a includerlo nella distribuzione. Ho anche notato che molti dei barattoli necessari per enunciate non vengono inclusi nel file WAR.

Perché vengono esclusi e come posso risolverli?

È stato utile?

Soluzione 2

Come risulta che uno dei barattoli che stiamo tentando di includere ha una dipendenza elencata nel suo file manifest di un vaso da cui Enunciate dipende (freemarker). Enunciate esclude automaticamente il freemarker e a prima vista sembra escludere automaticamente tutto ciò che dipende anche dal freemarker. Se rimuoviamo il freemarker dall'elenco dei barattoli dipendenti nel file manifest del nostro codice, funziona perfettamente.

Tuttavia; Ho parlato con lo sviluppatore principale di Enunciate (Ryan Heaten) e mi assicura che non è quello che sta succedendo. Inclusa la sua risposta di seguito:

  

Davvero?!

     

Wow. Interessante. Non so spiegare   essa; Enunciate non guarda a cosa   nel Manifest per determinare   cosa includere in guerra, quindi lo sono   un po 'perplesso qui. Potrebbe anche   essere un comportamento strano della formica (no   incluso quel barattolo nel   & Quot; en.classpath " riferimento per alcuni   ragione).

     

~ Ryan

Altri suggerimenti

Non ho mai usato enunciate, ma come hack rapido puoi aggiungere i vasetti alla guerra:

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

Nota: probabilmente si desidera aggiungere i vasetti nella directory WEB-INF / lib , anziché nella directory principale.

Suppongo che enunciate faccia il mininum per interferire con il tuo processo di compilazione, dato che sai meglio cosa mettere nel tuo file jar.

In enunciate.xml gli dico di non copiare alcuna libreria:

<webapp doLibCopy="false">

Quindi nel file build ant alla fine del compito enunciato aggiorno la guerra (puoi farlo per aggiornare i vasetti inclusi / esclusi indipendentemente dal fatto che tu abbia enunciato copiare i vasetti per te nel passaggio sopra):

<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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top