为什么Jars从Enunciate的部署中被排除?

时间:2008-10-02 15:08:56

标签: java ant war enunciate

我正在使用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文件中排除。有必要编译enunciate带注释的类,因此jar在编译时显然在类路径上,但是enunciate未能将它包含在发行版中。我还注意到,enunciate所需的几个jar文件没有包含在WAR文件中。

他们为什么被排除在外,我该如何解决?

2 个答案:

答案 0 :(得分:2)

我从未使用过enunciate,但作为一个快速黑客,你可以将罐子添加到战争中:

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

注意:您可能希望将jar添加到 WEB-INF / lib 目录,而不是根目录。

我猜测发音会使mininum干扰你自己的构建过程,因为你知道最好放在你的jar文件中。

答案 1 :(得分:1)

事实证明,我们试图包含的其中一个罐子里面有一个依赖关系,它包含了Enunciate依赖的jar的Manifest文件(freemarker)。 Enunciate自动排除freemarker,乍一看似乎它会自动排除任何依赖于freemarker的内容。如果我们从代码清单文件中的依赖jar列表中删除freemarker,它就可以正常工作。

然而;我已经和Enunciate的主要开发者(Ryan Heaten)谈过了,他向我保证这不是正在发生的事情。包括他的回复如下:

  

真的吗?!

     

哇。有趣。我无法解释   它; Enunciate不看什么   在清单中以确定   什么要包括在战争中,所以我   有点难过。它也可以   是一些奇怪的Ant行为(不是   包括那个罐子里面   一些“en.classpath”参考   原因)。

     

〜瑞恩