无法使用ant任务创建enunciate java客户端

时间:2013-03-04 22:54:58

标签: java ant enunciate

我正在尝试使用enunciate v1.26.2 ant任务创建java-client库。问题是每次我尝试这样做时,都会收到此警告消息:

WARNING: Unknown artifact 'java.client.library'.  Artifact will not be exported.

我已经检查过java-client enunciate jar是否在类路径上,并且甚至表示它已在输出中找到它。

enun:
Loading modules from the specified classpath....
Discovered module docs
Discovered module java-client
...

所以我不确定该怎么做。我已经尝试使用谷歌搜索来发现只有几个问题可以发音,似乎没有人回答我的问题。这是我的蚂蚁脚本,有相关的行:

<path id="enunciate.classpath">
    <fileset dir="${lib.enunciate.dir}">
        <include name="*.jar"/>
    </fileset>
    <fileset dir="${lib.dir}">
        <include name="**/*.jar" />
    </fileset>
    <fileset dir="${java.home}">
        <include name="lib/tools.jar"/>
    </fileset>
</path>

<taskdef name="enunciate" classname="org.codehaus.enunciate.main.EnunciateTask">
    <classpath refid="enunciate.classpath"/>
</taskdef>

<target name="enun" description="Run enunicate task on the rest services">
    <enunciate basedir="${src.web.java.dir}">
        <include name="**/*.java"/>
        <classpath refid="enunciate.classpath"/>
        <export artifactId="java.client.library" destination="${dist.client.dir}/rest/" />
        <export artifactId="docs" destination="${dist.docs.rest.dir}/"/>
        <javacArgument argument="-g"/>
    </enunciate>
</target>

注意:文档导出会被正确调用和导出,没有任何问题。包含的代码编译没有问题。我似乎无法发现为什么ant脚本不想导出java-client库。我已经尝试将artifactId的名称更改为几个不同的值,包括:java.client.library.binaries,java-client.library,enunciate-java-client,以及没有最终结果的所有其他方式。我试图使用enunciate.xml配置文件,这似乎没有帮助。这是我试图使用的xml:

<?xml version="1.0"?>
<enunciate label="full" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:noNamespaceSchemaLocation="http://enunciate.codehaus.org/schemas/enunciate-1.26.xsd">
    <modules>
        <java-client disabled="false" disableCompile="false" jarName="foo.jar"/>
        <docs disabled="false" docsDir="dist/docs/rest/"/>
    </modules>
</enunciate>

2 个答案:

答案 0 :(得分:0)

tl; dr: 对于我的项目,我只能使用enunciate的docs函数,因为我没有在其余服务的域对象上设置JAXB / Jackson。我使用了一些不同的东西,这些东西只传递JSON字符串,这些字符串不会识别为有效的端点返回/接受类型,因此无法创建客户端API。

因此,经过详尽的搜索和分析,我意识到我已经做了一些关于它的假设,这导致我走上了一条糟糕的道路。我将在这里分享我的发现,这将有助于其他任何人。

我的错误之中是我第一次只浏览了enunciate的网站,并没有完全点击发表的目标。 Enunciate是一个试图使创建休息API的库变得更加容易。但是,在已经制作的rest API中工作可能会非常棘手。在我的情况下,休息服务是如此庞大,以至于无法做出大的改变。

我拥有的最大的实现:enunciate要求你有某种端点返回/接受类型,enunciate可以识别。所以,JAXB,杰克逊等......如果没有这些事情,就会说:“我无法创建客户端API,因为我不知道你的端点正在返回/接受什么。”因此它拒绝。我通过在其域POJO上检查我的代码与enunciate examples以及POJO examples来自JAXB的@ {{xmlRootElemet}来测试了这一点。这允许其余服务传递它们并且JAXB处理(un /)编组。 Enunciate然后使用POJO创建一个客户端API,可以处理端点提供的数据。 (甚至可能只是直接复制POJO,但我还没有证实这一点。)

(希望我对此过程的理解是正确的。如果不是,请发表评论,我会进行适当的编辑。)

我希望这可以帮助其他人。

答案 1 :(得分:0)

咦。奇怪的。尝试导出到特定文件时会发生什么? E.g:

  <export artifactId="java.client.library" destination="${dist.client.dir}/rest/myfile.zip" />