Почему Jars исключаются из развертывания Enunciate?
Вопрос
Я использую Формулировать для создания прототипа REST api и необходимо включить jar, содержащий пользовательский код, в качестве библиотеки.
Мой Муравьиный скрипт выглядит следующим образом:
<!--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>
Проблема в том, что мой пользовательский jar исключается из файла WAR.Необходимо скомпилировать аннотированные классы enunciate, чтобы jar, очевидно, находился в classpath во время компиляции, но enunciate не удалось включить его в дистрибутив.Я также заметил, что некоторые из jar, необходимых для enunciate, не включаются в файл WAR.
Почему они исключаются и как мне это исправить?
Решение 2
Как оказалось, один из jar, который мы пытаемся включить, имеет зависимость, указанную в его файле манифеста jar, от которого зависит Enunciate (freemarker).Enunciate автоматически исключает freemarker, и на первый взгляд кажется, что это автоматически исключает все, что также зависит от freemarker.Если мы удалим freemarker из списка зависимых jar-файлов в файле манифеста нашего кода, он будет работать просто отлично.
Однако;Я говорил с главным разработчиком Enunciate (Райан Хитен), и он заверил меня, что это не то, что происходит.Включая его ответ ниже:
Неужели?!
Вау.Интересно.Я не могу объяснить IT;Enunciate не смотрит на то, что есть в манифесте, чтобы определить что включить в war, так что я здесь немного в тупике.Это также может быть какое-то странное поведение Ant (не включая этот jar в ссылку "en.classpath" по какой-то причине).
~Райан
Другие советы
Я никогда не использовал enunciate, но в качестве быстрого взлома вы можете добавить jars в war:
<jar jarfile="${dist}/${war.name}" update="true">
<fileset dir="${lib}">
<include name="**/*.jar" />
</fileset>
</jar>
Примечание:вы, вероятно, захотите добавить банки в WEB-INF/библиотека каталог, а не корневой каталог.
Я предполагаю, что enunciate делает минимальное вмешательство в ваш собственный процесс сборки, поскольку вы лучше всех знаете, что поместить в ваш jar-файл.
В enunciate.xml Я говорю ему, чтобы он сам не копировал какие-либо библиотеки:
<webapp doLibCopy="false">
Затем в файле сборки ant в конце задачи enunciate я обновляю war (вы можете сделать это, чтобы обновить включенные / исключенные jar, независимо от того, скопировали ли вы Enunciate 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>