java - 如何通过wsgen生成wsdl作为ant任务

标签 java ant wsgen

尝试通过 wsgen 作为 ANT 任务从 java 应用程序服务生成 jax-ws wsdl 文件。 Ant 的 taskdef 本身给了我很多类未找到的异常。 每次它第一次都会给出“com.sun.tools.ws.ant.WsGen”的类未找到,然后在类路径中添加“jaxws-tools-2.1.7.jar”。之后,它给出了“com/sun/istack/tools/ProtectedTask”未找到的类,然后添加了“istack-commons-tools-2.7.jar”。 现在它给出了“com/sun/tools/xjc/api/util/ToolsJarNotFoundException”未找到的类

我确信,我没有走正确的道路。

这里是build.xml

<?xml version="1.0"?>
<project name="Application Services" basedir="." default="compile">
<property file="build.properties"/>
<path id="external.projects">

    <fileset dir="/scratch/softwares" includes="*.jar"/>

</path>

<taskdef name="wsgen" classname="com.sun.tools.ws.ant.WsGen" classpathref="external.projects"> 

</taskdef>


<target name="compile" depends="clean,init">

      <javac destdir="${build.dir}" srcdir="${src.dir}" classpathref="external.projects"/>
</target>
<target name="packaging" depends="compile">
    <mkdir dir="${jar.dir}"/>
    <jar destfile="${jar.dir}/application.services.jar" basedir="${build.dir}"/>
    <wsgen 
        sei="webservice.interfaces.student.IStudentApplicationService"
        destdir="${jar.dir}" cp="external.projects" resourcedestdir="${jar.dir}"
        sourcedestdir="${jar.dir}" genwsdl="true"
        />
</target>
</project>

最佳答案

调试jar之间的依赖关系会让你发疯......你的ANT项目需要的是一个依赖管理器,例如Apache ivy .

我注意到的第二个问题是,您正在运行一个非常旧的版本,即 jaxws-tools,于 2009 年发布。从那时起,就出现了 lots and lots of updates

示例

演示如何使用 ivy 为 wsgen 任务创建托管类路径。

<ivy:cachepath pathid="wsgen.path">
  <dependency org="com.sun.xml.ws" name="jaxws-tools" rev="2.2.10" />
</ivy:cachepath>

<taskdef name="wsgen" classname="com.sun.tools.ws.ant.WsGen" classpathref="wsgen.path"/> 

build.xml

<?xml version="1.0"?>
<project name="Application Services" basedir="." default="packaging" xmlns:ivy="antlib:org.apache.ivy.ant">

  <available classname="org.apache.ivy.Main" property="ivy.installed"/> 

  <target name="install-ivy" description="Install ivy" unless="ivy.installed">
    <mkdir dir="${user.home}/.ant/lib"/>
    <get dest="${user.home}/.ant/lib/ivy.jar" src="http://search.maven.org/remotecontent?filepath=org/apache/ivy/ivy/2.3.0/ivy-2.3.0.jar"/>
    <fail message="Ivy has been installed. Run the build again"/>
  </target>

  <target name="resolve" depends="install-ivy" description="Use ivy to resolve classpaths">
    <ivy:cachepath pathid="wsgen.path">
      <dependency org="com.sun.xml.ws" name="jaxws-tools" rev="2.2.10" />
    </ivy:cachepath>
  </target>

  <target name="packaging" depends="resolve">
    <taskdef name="wsgen" classname="com.sun.tools.ws.ant.WsGen" classpathref="wsgen.path"/> 

    <wsgen 
        sei="webservice.interfaces.student.IStudentApplicationService"
        destdir="${jar.dir}" cp="external.projects" resourcedestdir="${jar.dir}"
        sourcedestdir="${jar.dir}" genwsdl="true"
        />
  </target>

</project>

注释:

  • 此构建文件将自动安装 ivy 插件
  • 依赖项会自动下载并缓存在“解析”目标中。

关于java - 如何通过wsgen生成wsdl作为ant任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34465249/

相关文章:

java - Ant 目标依赖树查看器

java - DH key 大小必须是 64 的倍数,并且只能在 512 到 2048(含)之间

svnant 不支持 svn 版本 1.7。该怎么办?

web-services - 使用 JAX-WS,如何在一个 wsdl 中拥有多个端口?

java - 使用 wsgen 和 maven 从 Java 生成 WSDL 时使用方法参数名称?

java - 在哪里使用wsgen?

java - BigInteger 循环无限执行

java - 如何识别结果来自哪个索引?

java - 过滤样本字符串中包含的项目

java - 根据键的值对列表进行排序