执行时显示错误的ant命令:找不到资源axis-tasks.properties

时间:2014-07-31 11:44:47

标签: ant axis2 wsdl2java

运行ant显示错误时出现问题无法从资源axis-tasks.properties加载定义。无法找到:

  

以下是发生问题的build.xml的快照

 <target name="axis" depends="prepare">
      <taskdef resource="axis-tasks.properties"/> 

      <axis-wsdl2java url="${webconsole.base}/src/myservice.wsdl"
            output="${axis.output}">
        <mapping
            namespace="urn:myservice"
            package="com.company.service" />
        <mapping
            namespace="http://webserviceurl.com"
            package="com.company.service" />
      </axis-wsdl2java>
    </target>

运行ant时显示以下错误:

/build.xml:76: Problem: failed to create task or type axis-wsdl2java
Cause: The name is undefined.
Action: Check the spelling.
Action: Check that any custom tasks/types have been declared.
Action: Check that any <presetdef>/<macrodef> declarations have taken place.

环境属性:

export TMPDIR=$HOME/tmp
export RELEASE=$HOME/Release
export JAVA_HOME=/usr/java/current
export ANT_HOME=/usr/local/apache-ant-1.6.5
export PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$PATH

其他信息

实际上,我们有两台构建机器。第一个只有root用户,我们手动创建了/ home / user文件夹,例如/ home / rajan等。在这台机器上,当我们从/ home / rajan / R7_SP1_UTF8 / vermaraj_R7_SP1 / vobs / project / ip_src / AdminWebConsole运行以root身份时,正常运行

echo $ PATH = /usr/java/current/bin:/usr/local/apache-ant-1.6.5/bin:/usr/lib/qt-3.3/bin:/usr/local/sbin:/ USR / local / bin中:/ sbin目录:/ bin中:/ usr / sbin目录:在/ usr / bin中:/根/ bin中

在第二台计算机上,我们创建了单独的用户帐户,当我们尝试从/ home / rajan / R7_SP1_UTF8 / vermaraj_R7_SP1 / vobs / project / ip_src / AdminWebConsole运行 ant以root或rajan 时ant 无法正常工作

echo $ PATH:/usr/lib/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root / bin中

此外,在两台构建机器中,echo $ CLASSPATH为空

locate axis-ant.jar将输出显示为:

  1. /home/Rajan/R7_SP1_UTF8/vermaraj_R7_SP1/vobs/project/ip_src/AdminWebConsole/lib/axis-ant.jar
  2. /home/Rajan/R7_SP1_UTF8/vermaraj_R7_SP1/vobs/project/ip_src/AdminWebConsole/output/war/WEB-INF/lib/axis-ant.jar
  3. /usr/local/apache-ant-1.6.5/lib/axis-ant.jar
  4. ivy不是一个选项,因为这是非常大的代码库的一部分,如果我们添加额外的库,它可能会产生问题。

3 个答案:

答案 0 :(得分:2)

ANT任务似乎确实有一组复杂的dependencies。我建议添加ivy extension来管理这些内容。

实施例

├── build.xml
├── src
│   └── myservice.wsdl
└── target
    └── output
        └── com
            └── examples
                └── www
                    └── wsdl
                        └── HelloService_wsdl
                            ├── Hello_BindingStub.java
                            ├── Hello_PortType.java
                            ├── Hello_Service.java
                            └── Hello_ServiceLocator.java

的build.xml

<project name="demo" default="axis" xmlns:ivy="antlib:org.apache.ivy.ant">

    <!--
    ================
    Build properties
    ================
    -->
    <property name="build.dir"   location="target"/>
    <property name="axis.output" location="${build.dir}/output"/>

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

    <!--
    ===========
    Targets
    ===========
    -->
    <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="build.path">
            <dependency org="org.apache.axis" name="axis-ant" rev="1.4" />
            <dependency org="org.apache.axis" name="axis" rev="1.4" />
            <dependency org="org.apache.axis" name="axis-jaxrpc" rev="1.4"/>
            <dependency org="commons-logging" name="commons-logging" rev="1.1.1" />
            <dependency org="commons-discovery" name="commons-discovery" rev="0.4" />
            <dependency org="wsdl4j" name="wsdl4j" rev="1.6.2" />
        </ivy:cachepath>
    </target>

    <target name="axis" depends="resolve" description="Run Axis task">
        <taskdef resource="axis-tasks.properties" classpathref="build.path"/> 

        <mkdir dir="${axis.output}"/>

        <axis-wsdl2java url="src/myservice.wsdl" output="${axis.output}">
            <mapping namespace="urn:myservice" package="com.company.service" />
            <mapping namespace="http://webserviceurl.com" package="com.company.service" />
        </axis-wsdl2java>
    </target>

    <target name="clean" description="Clean workspace">
        <delete dir="${build.dir}"/>
    </target>

    <target name="clean-all" depends="clean" description="Purge ivy cache">
        <ivy:cleancache/>
    </target>

</project>

答案 1 :(得分:0)

axis-task.properties是axis-ant.jar的一部分,但它不适用于ant:
/build.xml:76: Problem: failed to create task or type axis-wsdl2java
它需要在ant classpath上。

一个简单的方法 - 但不推荐 - 是将所有轴jar放在ANT_HOME / lib中,但这会污染ant核心安装。最好在axis.apache.org上将here描述为自己的路径 另一种方法是将所有的ant插件库或第三方jar放在一个特殊的文件夹中,并通过ANT_ARGS环境变量使其可用于ant。

将此行放在ANT_HOME / bin / ant.sh中:

  ANT_ARGS="-lib /usr/local/ant_xtralibs:/usr/local/ant_testlibs"
  export ANT_ARGS

或按照here

所述创建自己的启动脚本

答案 2 :(得分:0)

平台:Ubuntu 16.04 LTS

首先,要使该语句有效,您需要使用Axis 1(下载:here)而不是Axis2。
然后按照说明here指定要使用的类路径。
在此之前,必须在二进制安装根目录axis.home的{​​{1}}中手动设置build.xml属性,或从环境变量/opt/local/axis-1_4/中读取,指向相同的目录,如下所示:

AXIS_HOME

或在 <property environment="env"/> <property name="axis.home" value="${env.AXIS_HOME}"/> 文件中设置。
您的build.properties子目录路径可能不同于*.jar,在我的情况下为${axis.home}/build/lib