我正在使用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文件中。
他们为什么被排除在外,我该如何解决?
答案 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”参考 原因)。
〜瑞恩