我正在使用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显然在编译时就在类路径上,但声明未能将其包含在发行版中。我还注意到,在WAR文件中并没有包含enunciate所需的几个WAR。
为什么它们被排除在外,我该如何修复它?
发布于 2009-06-29 13:28:46
事实证明,我们试图包含的jar中有一个依赖项,该依赖项列在阐述所依赖的jar的清单文件(freemarker)中。声明自动排除了freemarker,乍一看,它似乎自动排除了所有依赖于freemarker的内容。如果我们从代码清单文件中的依赖jars列表中删除freemarker,它就能正常工作。
然而,我已经和Enunciate的主要开发者(Ryan Heaten)谈过了,他向我保证这不是正在发生的事情。包括他的回应如下:
真的吗?!
哇。有意思的。我无法解释这一点;Enunciate不会查看Manifest中的内容,以确定战争中应该包含哪些内容,所以我在这里有点困惑。这也可能是一些奇怪的Ant行为(由于某种原因,不在"en.classpath“引用中包含jar )。
~Ryan
发布于 2008-10-21 10:41:02
我从来没有使用过enunciate,但作为一个快速的技巧,你可以将jars添加到战争中:
<jar jarfile="${dist}/${war.name}" update="true">
<fileset dir="${lib}">
<include name="**/*.jar" />
</fileset>
</jar>注意:您可能希望将jars添加到WEB-INF/lib目录,而不是根目录。
我猜想,由于您最清楚应该在jar文件中放入什么内容,所以enunciate对您自己的构建过程进行了最小程度的干预。
发布于 2015-09-11 04:14:06
在enunciate.xml中,我告诉它不要复制任何库:
<webapp doLibCopy="false">然后,在ant构建文件中,在阐述任务的末尾,我更新了war (您可以这样做来更新包含/排除的war,无论您是否已经在上面的步骤中阐明了复制这些war):
<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>https://stackoverflow.com/questions/162874
复制相似问题