2

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

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

我检查了 java-client enunciate jar 是否在类路径上,并且 enunciate 甚至说它在输出中找到了它。

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

所以我不确定该怎么做。我试过用谷歌搜索发现 SO 只有几个问题要表达,似乎没有人回答我的问题。这是我的带有相关行的 ant 脚本:

<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>
4

2 回答 2

0

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

因此,在对发音进行了详尽的搜索和分析之后,我意识到我对此做了一些假设,导致我走上了一条错误的道路。我将在这里分享我的发现,以防这有助于一路上的其他人。

我的错误之一是我第一次只浏览了 enunciate 的网站,它并没有完全点击 enunciate 的目标是什么。Enunciate 是一个试图让创建rest API 变得更加容易的库。但是,在已经制作的 rest API 中工作可能会很棘手。就我而言,其余服务是如此庞大,以至于不可能进行大的更改。

我最大的认识是:enunciate 要求你有某种 enunciate 可以识别的端点返回/接受类型。因此,JAXB、Jackson 等......如果没有这些东西,基本上会说:“我无法制作客户端 API,因为我不知道您的端点正在返回/接受什么。” 因此它拒绝。我通过检查我的代码与发音示例来测试这一点,POJO示例其域 POJO 上具有来自 JAXB 的 @XmlRootElemet。这允许其余服务传递它们,并由 JAXB 处理(un/)编组。然后,Enunciate 使用 POJO 创建一个客户端 API,该 API 可以处理端点传递给它的数据。(甚至可能只是 POJO 的直接副本,不过我还没有证实这一点。)

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

我希望这对其他人有帮助。

于 2013-03-08T14:11:28.703 回答
0

嗯。奇怪的。当您尝试导出到特定文件时会发生什么?例如:

  <export artifactId="java.client.library" destination="${dist.client.dir}/rest/myfile.zip" />
于 2013-03-08T19:35:56.103 回答