Почему банки исключаются из развертывания Enunciate? - PullRequest
0 голосов
/ 02 октября 2008

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

Мой скрипт 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>

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

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

Ответы [ 3 ]

2 голосов
/ 21 октября 2008

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

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

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

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

1 голос
/ 29 июня 2009

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

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

В самом деле?! * * 1006

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

~ Райан

0 голосов
/ 10 сентября 2015

В 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>
...