我正在尝试使用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>
答案 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" />