Pergunta

estou a usar Enunciar Para criar uma API de REST protótipo e precisar incluir um frasco contendo código personalizado como uma biblioteca.

Meu script de formiga se parece com o seguinte:

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

O problema é que meu frasco personalizado está sendo excluído do arquivo de guerra. É necessário compilar as classes anotadas enunciadas para que o frasco esteja obviamente no caminho de classe no tempo de compilação, mas a Enunciate está deixando de incluí -lo na distribuição. Também notei que vários dos frascos necessários para Enunciate não estão sendo incluídos no arquivo de guerra.

Por que eles estão sendo excluídos e como faço para consertar isso?

Foi útil?

Solução 2

Acontece que um dos frascos que estamos tentando incluir possui uma dependência listada em seu arquivo manifesto de um frasco que o enunciado depende (Freemarker). A Enunciate exclui automaticamente o Freemarker e, à primeira vista, parece que exclui automaticamente qualquer coisa que depende do Freemarker também. Se removermos o Freemarker da lista de frascos dependentes no arquivo de manifesto do nosso código, ele funciona muito bem.

No entanto; Conversei com o principal desenvolvedor da Enunciate (Ryan Heeten) e ele me garante que isso não está acontecendo. Incluindo sua resposta abaixo:

Sério?!

Uau. Interessante. Eu não posso explicar isso; Enunciate não olha para o que está no manifesto para determinar o que incluir na guerra, então eu estou meio perplexo aqui. Também pode ser um comportamento estranho da formiga (sem incluir esse frasco na referência "en.classpath" por algum motivo).

~ Ryan

Outras dicas

Eu nunca usei Enunciate, mas como um truque rápido, você pode adicionar os frascos à guerra:

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

Nota: você provavelmente deseja adicionar os potes ao Web-inf/lib diretório, em vez do diretório raiz.

Suponho que o Enunciate o mininum interfira no seu próprio processo de construção, pois você sabe melhor o que colocar no seu arquivo JAR.

Em enunciate.xml, digo para não copiar nenhum Libs:

<webapp doLibCopy="false">

Então, no arquivo de compilação da ANT, no final da tarefa Enunciate, atualizo a guerra (você pode fazer isso para atualizar os frascos incluídos/excluídos, independentemente de ter ou não enunciar cópia dos frascos para você na etapa acima):

<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>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top