当前位置: 首页 > 知识库问答 >
问题:

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

邵羽
2023-03-14

我正在尝试使用enuncicate v1.26.2 ant任务创建java客户端库。问题是,每次我尝试这样做时,我都会收到以下警告信息:

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

我已经检查了java-客户端发音jar是否在类路径上,并且发音甚至说它已经在输出中找到了它。

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

所以我不确定到底该怎么做。我尝试在谷歌上搜索,发现SO只有几个问题需要阐明,似乎没有一个回答我的问题。这是我的蚂蚁脚本,其中包含相关行:

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

注意:docs export被调用并正确导出,没有任何问题。包含的代码编译起来没有问题。我似乎不明白为什么ant脚本不想导出java客户端库。我曾尝试将artifactId的名称更改为几个不同的值,包括:java.client.library.binaries、java-client.library、expertion-Java-client以及其他各种没有最终结果的名称。我尝试过使用一个expertion . 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个答案

公良俊楚
2023-03-14

TL;dr:在我的项目中,我只能使用expertion的docs函数,因为我没有在rest服务的域对象上设置JAXB/Jackson。我使用了不同的东西,它只传递JSON字符串,这表明它不能识别为有效的endpoint返回/接受类型,因此不能创建客户端API。

因此,在对发音进行了详尽的搜索和分析之后,我意识到我对它做了一些假设,这导致我走上了一条糟糕的道路。我会在这里分享我的发现,因为这对任何人都有帮助。

我的错误之一是,我第一次只是浏览了experience的网站,它没有点击experience的目标是什么。expertion是一个库,它试图让创建rest API变得更加容易。然而,在一个已经制作好的rest API中工作可能会很棘手。在我的例子中,rest服务是如此庞大,以至于不可能做出大的改变。

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

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

我希望这能帮助其他人。

夹谷飞龙
2023-03-14

哼。奇怪。尝试导出到特定文件时会发生什么情况?例如:

  <export artifactId="java.client.library" destination="${dist.client.dir}/rest/myfile.zip" />
 类似资料:
  • 当我运行我的ant任务时,我得到以下错误 /build.xml:61:问题:无法创建任务或类型javac原因:找不到类org.apache.tools.ant.taskdefs.javac。操作:检查组件是否已正确声明,并且实现JAR是否位于以下目录中:-/idea-ic-107.587/lib/ant/lib-/home/.ant/lib-在命令行中添加了-lib参数的目录 但是我在上面提到的路

  • 由于我将 Java 从 JDK7u55 更新到 JDK7u60,因此我在运行构建时遇到了一个问题。我在 Windows Server 2003 Standard Edition 上使用 Ant 1.6.5。下面是导致问题的 Ant 任务。 一旦两个jar被重命名,我就开始使用< code >运行所有的测试 现在由于我将Java升级到JDK7u60,而不是等待所有测试完成,最后两个

  • 怎么了 我试图使用kubernetes python客户机在kubernetes中创建自定义资源定义,但我无法这样做,如果有人能解释我在这里做错了什么,那将会很有帮助 null

  • 我正在使用java高级rest客户端在我的应用程序中集成elasticsearch,但无法创建索引 在某个地方,我发现要执行请求,我们需要使用index(请求)方法(我在代码中已注释),但它表明index(请求)方法已从RestHighLevelClient类型中弃用。 这是我的代码:

  • 此任务用于创建目录。如果目录不存在,它会创建一个新目录。 如果目录已存在,则不会创建目录。 此任务使用以下属性。 1. Apache Ant Mkdir任务属性 属性 描述 必需 要创建的目录 是 2. Apache Ant Mkdir任务示例 参考以下示例代码: 上面的代码将在当前项目位置创建一个目录:yiibai-dir。 创建嵌套目录(子目录) 上面的代码将在yiibai-dir目录中创建一

  • 在构建中使用自定义Ant任务 为了让你的构建可以自定义任务, 你可以使用 taskdef(通常更容易) 或者 typedef Ant 任务, 就像你在一个build.xml文件中一样. 然后,你可以参考内置 Ant 任务去定制 Ant 任务. 例 16.5.使用自定义 Ant 任务 build.gradle task check << { ant.taskdef(resource: 'ch