我正在尝试使用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>
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的直接副本,但我还没有确认这一点。)
(希望我对这个过程的理解是正确的。如果不是,请发表评论,我将进行适当的编辑。)
我希望这能帮助其他人。
哼。奇怪。尝试导出到特定文件时会发生什么情况?例如:
<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