Почему банки исключаются из развертывания Enunciate?

Я использую Enunciate для создания прототипа REST API, и мне нужно включить банку, содержащую пользовательский код, в качестве библиотеки.

Мой сценарий Ant выглядит так:

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

Проблема в том, что моя пользовательская банка исключается из файла WAR. Необходимо скомпилировать аннотированные классы enunciate, чтобы jar явно находился в пути к классам во время компиляции, но enunciate не включил его в дистрибутив. Я также заметил, что несколько банок, необходимых для enunciate, не включены в файл WAR.

Почему они исключаются и как это исправить?


person Randyaa    schedule 02.10.2008    source источник


Ответы (3)


Я никогда не использовал enunciate, но в качестве быстрого хака вы можете добавить банки в войну:

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

Примечание. Вероятно, вы захотите добавить файлы JAR в каталог WEB-INF/lib, а не в корневой каталог.

Я предполагаю, что enunciate минимально мешает вашему собственному процессу сборки, поскольку вы лучше знаете, что поместить в свой файл jar.

person Miguel Ping    schedule 21.10.2008
comment
Upvote, так как это направило меня в правильном направлении. Однако мне действительно нужно было использовать военную задачу с элементом lib. - person Amber; 10.09.2015

Как оказалось, один из jar-файлов, который мы пытаемся включить, имеет зависимость, указанную в файле манифеста jar-файла, от которого зависит Enunciate (freemarker). Enunciate автоматически исключает freemarker, и на первый взгляд кажется, что он также автоматически исключает все, что зависит от freemarker. Если мы удалим freemarker из списка зависимых jar-файлов в файле манифеста нашего кода, он будет работать нормально.

Однако; Я разговаривал с главным разработчиком Enunciate (Райаном Хитеном), и он уверяет меня, что это не то, что происходит. Включая его ответ ниже:

Действительно?!

Вот это да. Интересно. Я не могу это объяснить; Enunciate не смотрит на то, что находится в манифесте, чтобы определить, что включить в войну, поэтому я здесь как бы в тупике. Это также может быть какое-то странное поведение Ant (по какой-то причине эта банка не включена в ссылку «en.classpath»).

~ Райан

person Randyaa    schedule 29.06.2009

В enunciate.xml я говорю ему не копировать никакие библиотеки:

<webapp doLibCopy="false">

Затем в файле сборки ant в конце задачи enunciate я обновляю войну (вы можете сделать это, чтобы обновить включенные/исключенные банки независимо от того, есть ли у вас Enunciate копирование банок для вас на шаге выше):

<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>
person Amber    schedule 10.09.2015