1

最近我切换到 Linux Mint 15,但我遇到了 Eclipse 和 ant 的问题。这是导致问题的 ant 脚本:

                <exec osfamily="unix" executable="wsimport">
                    <arg line="${prefix}/${jaxb.resources}/${jaxb.schema@{i}} -s ${prefix}/${jaxb.src} -p ${jaxb.package@{i}} -wsdllocation ${jaxb.schema@{i}} -b ${prefix}/jaxb-bindings.xml -Xdebug -verbose -Xnocompile" />
                </exec>

但是,在构建过程中,在 Eclipse 中使用 ant,我收到以下错误:

Execute failed: java.io.IOException: Cannot run program "wsimport": error=2, No such file or directory

我知道这是因为 Eclipse 无法找到作为 JDK 一部分的 wsimport 工具。但是,如果我在终端中运行这个 ant 脚本,一切都会正确通过。我的 .bashrc 将 PATH 变量设置为 jdk/bin 文件夹,并且可以通过终端访问 wsimport。Eclipse 使用安装在我的机器上的 ant 版本(不是嵌入式的),项目是使用 JDK 编译器构建的(不是嵌入的)。我使用 Oracle 的 JDK 1.7.0_45 64 位。

提前致谢。

编辑:

我在 /usr/lib/jvm/jdk 中手动安装了我的 JDK(不是通过包安装程序)。使用 update-alternatives 对其进行配置,并在我的用户的 .bashrc 中设置 JAVA_HOME 和 PATH 变量。就像我说的,ant 脚本在终端上工作,但不是来自 Eclipse(在 ant 窗口上) 也许 eclipse 不知道 .bashrc 中的 PATH 变量......

4

1 回答 1

2

(这是一个老问题,但也许这会在将来对其他人有所帮助。)您可以使用 Ant 任务运行 wsgen 和 wsimport。我不熟悉你的所有变量,所以我的例子只是做自己的事情。它需要变量:

  • metro.home - webservices-tools.jar 的位置
  • build.classpath - 依赖 jar 文件的类路径
  • build.classes - @WebService 类的类路径
  • basedir - 编写 wsgen 和 wsimport 文件的位置

这是示例。

<!-- setup Metro tooltime classpath -->
<path id="tool.cp">
    <path refid="runtime.cp"/>
    <pathelement location="${metro.home}/webservices-tools.jar"/>
</path>

<!--
    Setup Wsimport ant task. You would use this task in WSDL to Java case
    to compile a WSDL and generate Java classes.
-->
<taskdef name="wsimport" classname="com.sun.tools.ws.ant.WsImport">
    <classpath refid="tool.cp"/>
</taskdef>

<!--
    Setup Wsgen ant task. You would use this task in Java to WSDL case to
    generate a WSDL or wrapper classes.
-->
<taskdef name="wsgen" classname="com.sun.tools.ws.ant.WsGen">
    <classpath refid="tool.cp"/>
    <classpath refid="build.classpath"/>
</taskdef>

<target name="wsimport">
    <wsgen sei="com.company.app.ws.Authorize"
        classpath="${build.classes}"
        sourcedestdir="${basedir}/wsgen/src"
        destdir="${basedir}/wsgen/classes"
        keep="true" verbose="true" genwsdl="true" resourcedestdir="wsgen">
        <classpath refid="build.classpath"/>
    </wsgen>
    <wsimport verbose="true" keep="true"
        destdir="${basedir}/wsimport/classes"
        sourcedestdir="${basedir}/wsimport/src"
        wsdl="${basedir}/wsgen/AuthorizeService.wsdl"
    />
</target>

注意:这也适用于我从运行在 RedHat 上的 Jenkins 启动 Ant 脚本时。

注意:如果您尝试在 Eclipse 中使用外部工具运行 Ant,如果您在外部工具配置中选择 JRE,例如“jre7”作为 JRE,您可能会遇到问题;更好地配置和使用 JDK,例如“jdk1.7.0_80”。此外,将“tools.jar”添加为外部工具配置中的附加类路径条目。

于 2016-02-19T21:49:27.697 回答