Frage

Ich bin mit enunciate einen Prototyp REST api zu bauen und ein Glas mit benutzerdefinierten Code enthalten müssen als eine Bibliothek.

Meine Ant-Skript sieht wie folgt aus:

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

Das Problem ist, dass mein benutzerdefiniertes Glas aus der WAR-Datei ausgeschlossen wird. Es ist notwendig, die enunciate kommentierten Klassen zu kompilieren, um das Glas offensichtlich auf dem Classpath bei der Kompilierung ist aber enunciate versagt es in der Distribution enthalten. Ich habe auch bemerkt, dass einige der Gläser durch enunciate benötigt werden, nicht in der WAR-Datei enthalten sind.

Warum sind sie ausgeschlossen werden und wie kann ich das Problem beheben?

War es hilfreich?

Lösung 2

Wie sich herausstellt eine der Gläser sind versuchen wir umfassen hat eine Abhängigkeit aufgelistet in seiner Manifest-Datei von einem Glas, das enunciate auf (Freemarker) abhängt. Enunciate automatisch schließt und auf Freemarker den ersten Blick scheint es, als ob es automatisch alles ausschließt, die auch auf Freemarker abhängt. Wenn wir Freemarker aus der Liste der abhängigen Gläser in unserem Code Manifest-Datei entfernen funktioniert es gut.

Allerdings; Ich habe mit dem Hauptentwickler von enunciate (Ryan heaten) gesprochen, und er hat mir versichert, das ist nicht, was passiert. Einschließlich seiner Antwort unter:

  

Wirklich?!

     

Wow. Interessant. Ich kann nicht erklären   es; Enunciate sieht nicht an, was   in dem Manifest, um zu bestimmen,   was in den Krieg zu schließen, also bin ich   Art hier von stapfte. Es könnte auch   einige seltsame Ant Verhalten (nicht   einschließlich der in der jar   „En.classpath“ Referenz für einige   Grund).

     

~ Ryan

Andere Tipps

ich nie benutzt enunciate, aber als schneller Hack können Sie die Gläser in den Krieg hinzufügen:

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

. Hinweis: Sie wollen wahrscheinlich die Gläser auf den WEB-INF / lib Verzeichnis statt in dem Root-Verzeichnis hinzuzufügen

Ich vermute, dass enunciate tut das mininum mit Ihrem eigenen Build-Prozess zu stören, da Sie wissen am besten, was in Ihrer JAR-Datei zu setzen.

In enunciate.xml Ich sage es nicht Libs selbst zu kopieren:

<webapp doLibCopy="false">

Dann in der Ant-Build-Datei am Ende der enunciate Aufgabe, die ich in den Krieg aktualisieren (Sie können dies tun, um die enthalten / ausgeschlossen Gläser, ob Sie artikulieren kopieren Sie in dem Schritt über die Gläser haben zu aktualisieren):

<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>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top