任务定义类com.sun.tools.ws.ant.WsImport找不到。遵循《Java Web Services教程》。

18
我在许多不同的地方都看到了相同的问题,即使经过了大量的谷歌搜索,我也无法解决它。我正在尝试完成Java Web Services教程(更大的图景),但在某些点似乎不同步,特别是这里,当我尝试编译时,会出现以下消息:
C:\javaeetutorial5\examples\jaxws\common\targets.xml:26: 无法找到taskdef类com.sun.tools.ws.ant.WsImport
我尝试过许多不同的放置jar或更改环境变量的组合,但没有结果。有任何成功的故事吗?
完整的构建错误消息如下:
BUILD FAILED
C:\javaeetutorial5\examples\jaxws\helloservice\build.xml:4: 在执行此行时发生以下错误:
C:\javaeetutorial5\examples\jaxws\common\targets.xml:26: taskdef类com.sun.tools.ws.ant.WsImport需要一个类:org/apache/tools/ant/DynamicConfigurator,但找不到该类。
使用类加载器AntClassLoader[C:\Program Files (x86)\Java\jdk1.6.0_23\lib\tools.jar]
总时间:0秒
相应的任务定义如下:
<taskdef name="wsimport" classname="com.sun.tools.ws.ant.WsImport">
    <classpath refid="jaxws.classpath"/>
</taskdef>

还可以查看认可目录:

C:\javaeetutorial5\kschneid>cd %JAVA_HOME%

C:\Program Files (x86)\Java\jdk1.6.0_23>dir lib\endorsed
 Volume in drive C is OSDisk
 Volume Serial Number is AAAA-BBBB

 Directory of C:\Program Files (x86)\Java\jdk1.6.0_23\lib\endorsed

25/02/2011  09:34    <DIR>          .
25/02/2011  09:34    <DIR>          ..
25/02/2011  09:34           105,134 jaxb-api.jar
25/02/2011  09:33            54,476 jaxws-api.jar
               2 File(s)        159,610 bytes
               2 Dir(s)  110,907,056,128 bytes free

C:\Program Files (x86)\Java\jdk1.6.0_23>

你的 <taskdef> 是什么样子的?请包含你正在使用的类路径。 - kschneid
@kschneid。非常抱歉我没有包含所有的细节。因为很多人都从这个教程开始,所以我想我们会遇到相同的障碍。更新中。 - Dimitrios Mistriotis
jaxws.classpath 是如何定义的? - kschneid
...你还应该指定你正在使用的JAX-WS和Ant版本... - kschneid
关于jaxws.classpath。我甚至不知道它是否已设置(我正在按照没有具体提及的教程进行学习,而且我对这项技术还很陌生)。此外,我已经下载了JAXWS2.2.3。 - Dimitrios Mistriotis
11个回答

22

您可以按照以下步骤在Netbeans x.y中解决问题:

  1. 转到工具->选项->Java->Ant。
  2. 在类路径(Classpath)部分下点击"添加JAR / ZIP ..."。
  3. 导航至"C:\Program Files\NetBeans x.y\enterprise\modules\ext\metro\"。
  4. 选择所有文件。
  5. 点击确定,并尝试再次导入/重新生成。

其中x.y= 7.1、7.2、8.0等版本号。


目前没有资源进行检查,能否有其他遇到同样问题的人尝试并通知我们? - Dimitrios Mistriotis
你没有资源来检查什么? - Babatunde Adeyemi
我没有时间检查你的解决方案是否正确(下载NetBeans安装它并按照步骤操作)。如果有其他人可以确认它,我可以选择答案为正确的 :-) - Dimitrios Mistriotis
在Centos 7上使用Netbeans 8.2进行开发。我将Netbeans安装在我的主文件夹中的netbeans-8.2rc文件夹内,因此JAR文件的完整路径为/home/my_user/netbeans-8.2rc/enterprise/modules/ext/metro/。 - Broken_Window
1
新路径:"C:\Program Files\NetBeans-11.1\netbeans\enterprise\modules\ext\metro" - garish
这也适用于Netbeans 12.6。新路径:C:\Program Files\NetBeans-12.6\netbeans\enterprise\modules\ext\metro - Broken_Window

13

显然,提供一个带有solution的网站链接是不可接受的,因此我会在这里粘贴答案:

<property name="BUILD_LIBS" location="C:/Projects/Build/Libs/" />

<taskdef name="wsimport" classname="com.sun.tools.ws.ant.WsImport">
    <classpath>
        <pathelement location="${BUILD_LIBS}/jaxws-ri/lib/jaxws-tools.jar"/>
    </classpath>
</taskdef>

问题是由于相关的jaxws jar不在类路径中,可以查看上面的pathelement节点。将该jar添加到类路径中即可解决问题。

18
由于解决方案链接已经失效,你在这里放置代码真是太好了! - ted.strauss

9
<wsimport> ant任务并没有包含在JDK中,尽管有一个可以执行完全相同功能的wsimport.exe。
如果你确实需要ant任务,可以下载jaxws-ri并使用lib文件夹中的23个jar文件。
或者你可以通过调用wsimport.exe来使用这个解决方法。
<target name="generate-client" >
    <exec executable="${java.home}/../bin/wsimport">
        <arg line="-keep -d build/classes -p ebay.apis -s src -wsdllocation http://localhost:7070/Ebay?wsdl eBaySvc.wsdl"/>
    </exec>
</target>

4

我完全支持非IDE开发,特别是在学习时。请尝试使用这个简单的构建文件开始(使用您的JAX-WS RI安装实际位置):

<project name="jaxws-tutorial" default="wsimport">

    <property name="jaxws.home" location="D:/jaxws-ri-2_2_1"/>

    <path id="wsimport.classpath">
        <fileset dir="${jaxws.home}/lib" includes="jaxws-tools.jar"/>
    </path>

    <taskdef name="wsimport" classname="com.sun.tools.ws.ant.WsImport" classpathref="wsimport.classpath"/>

    <target name="wsimport">
        <wsimport>
            <arg value="-version"/>
        </wsimport>
    </target>

</project>

如果你只运行ant,你应该会看到以下类似的输出:
wsimport:
 [wsimport] Consider using <depends>/<produces> so that wsimport won't do unnecessary compilation
 [wsimport] JAX-WS RI 2.2.1-b01-

看起来您正在使用Java 6,需要注意“在JDK6上运行”


我感觉我已经接近成功了,但还没有到达目标(在问题正文中添加了认可位置的外观),我得到了以下输出: 构建失败 c:\ javaeetutorial5 \ kschneid \ build.xml:9:taskdef com.sun.tools.ws.ant.WsImport类所需的类找不到:org / apache / tools / ant / DynamicConfigurator 使用类加载器AntClassLoader [C:\ Sun \ jaxws-ri \ lib \ jaxws-tools.jar; C:\ Sun \ jaxws-ri \ lib \ jaxws-rt.jar; C:\ Sun \ jaxws-ri \ lib \ jaxws-api.jar; C:\ Sun \ jaxws-ri \ lib \ jsr181-api.jar; C:\ Sun \ jaxws-ri \ lib \ jsr250-api.jar; C:\ Sun \ jaxws-ri \ lib \ saaj-api.jar; ...] 总时间:0秒 - Dimitrios Mistriotis

2

我将classname="com.sun.tools.ws.ant.WsImport"更改为classname="com.sun.tools.ws.WsImport",这样问题就解决了。


2
为了解决这个错误,我们需要使用“工具”->“选项”,点击“杂项”,在“Ant”选项卡中使用“添加Jar/ZIP”来定位并添加目录中的库webservices-tools.jarwebservices-rt.jar

1
这对我有用:
我从官方网站下载了JAVA-WS库,并将其放在extra-lib目录中。此目录与build.xml处于同一级别。 在build.xml中,我从jaxws-build.xml复制了名为“wsimport-init”的Ant任务,并按以下方式进行了修改:
...
    <target name="wsimport-init" depends="init">
        <mkdir dir="${build.generated.sources.dir}/jax-ws"/>
        <taskdef name="wsimport" classname="com.sun.tools.ws.Ant.WsImport">
            <classpath>
                <fileset dir="./extra-lib">
                    <include name="**/*.jar"/>
                </fileset>
            </classpath>
        </taskdef>
    </target>
...

参考资料:http://www.staniscia.net/989-resolve-the-portable-problem-of-netbean-jax-ws-libraries-for-web-service-clients/


0
我找到了一个并不令我满意的答案: 安装了 NetBeans,它可以帮助将所有东西组合在一起。但是命令行仍然无法工作(这意味着环境被分隔开来,这是好事)。我可以跟进教程,但我仍然相信一切都应该从命令行完成(是我吃了太多 Unix 吗?)

我想我正在经历相同的经历。我希望只使用NetBeans创建的ant build.xml来创建依赖于其他ws的ws。但是我遇到了以下问题。如果您解决了您的情况,我很乐意听取您的建议。 - simgineer
不幸的是,我不得不放弃这个(教育性)项目,这就是我到目前为止没有选择答案的原因。我从中得到的是,Sun网站上的文档已经过时。在后来遇到的一些应用场景中,我偶然使用了RESTful接口,因此我没有必要深入研究Web服务。如果有什么变化,我会更新的... - Dimitrios Mistriotis

0

0
如果您正在使用Eclipse IDE并遇到此问题,这里有一些对我有效的解决方法。 前往:Window > Preferences。 在左侧找到Ant选项。
展开它,您将找到ANT Runtime。选择该选项并检查Classpath选项卡中包含的jar文件。
选择添加外部Jar选项。现在转到系统中的ant主目录。进入lib文件夹并添加所有缺失的jar文件。
这将解决ant-build的缺失依赖项问题。
希望能对您有所帮助!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接