0

I'm using Enunciate to build a prototype REST api and need to include a jar containing custom code as a library.

My Ant Script looks like this:

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

The problem is that my custom jar is being excluded from the WAR file. It is necessary to compile the enunciate annotated classes so the jar is obviously on the classpath at compile time but enunciate is failing to include it in the distribution. I have also noticed that several of the jars needed by enunciate are not being included in the WAR file.

Why are they being excluded and how do I fix it?

4

3 に答える 3

2

私は発音を使用したことはありませんが、簡単なハックとして、jar を war に追加できます。

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

注:ルート ディレクトリではなく、 WEB-INF/libディレクトリにjar を追加することをお勧めします。

jar ファイルに何を入れるべきかはあなたが一番よく知っているので、enunciate はあなた自身のビルド プロセスに干渉する最小限の機能を果たしていると思います。

于 2008-10-21T10:41:02.083 に答える
1

含めようとしている jar の 1 つが、Enunciate が依存する jar (freemarker) のマニフェスト ファイルにリストされている依存関係を持っていることが判明しました。Enunciate は freemarker を自動的に除外します。一見すると、freemarker に依存するものもすべて自動的に除外するように見えます。コードのマニフェスト ファイルの依存 jar のリストから freemarker を削除すると、問題なく動作します。

でも; 私は Enunciate の主な開発者 (Ryan Heaten) と話をしましたが、彼はこれが起こっていることではないことを保証します。以下に彼の応答を含めます。

本当?!

わお。面白い。説明できません。Enunciate は、戦争に何を含めるかを決定するためにマニフェストの内容を調べないので、ここでちょっと困惑しています。また、奇妙な Ant の動作である可能性もあります (何らかの理由で「en​​.classpath」リファレンスにその jar が含まれていません)。

〜ライアン

于 2009-06-29T13:28:45.793 に答える
0

enunciate.xml で、ライブラリ自体をコピーしないように指示します。

<webapp doLibCopy="false">

次に、enunciate タスクの最後にある ant ビルド ファイルで war を更新します (上記の手順で Enunciate を使用して jar をコピーするかどうかに関係なく、これを実行して、含まれている/除外されている jar を更新できます)。

<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>
于 2015-09-10T20:14:06.250 に答える