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

StackOverflow https://stackoverflow.com/questions/162874

  •  03-07-2019
  •  | 
  •  

Вопрос

Я использую Формулировать для создания прототипа 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>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top