【问题标题】:ant command showing error while execution : resource axis-tasks.properties could not be foundant 命令在执行时显示错误:找不到资源 axis-tasks.properties
【发布时间】:2014-09-23 08:25:08
【问题描述】:

运行 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 ant 以 root 身份运行 ant 时,ant 工作正常。

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:/root/bin

在第二台机器上,我们创建了个人用户帐户,当我们尝试从 /home/rajan/R7_SP1_UTF8/vermaraj_R7_SP1/vobs/project/ip_src/AdminWebConsole 以 root 或 rajan 身份运行 ant 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

ivy 不是一个选项,因为这是非常大的代码库的一部分,如果我们添加额外的库,它可能会产生问题。

【问题讨论】:

  • 如果您不使用像 ivy 这样的工具(来管理您的运行时类路径依赖项),那么您将需要一些替代机制来确保您的构建具有所需的所有 3rd 方 jar。现在,如果您的代码作为一个用户正常运行,则表明另一个用户缺少 jars。检查根主帐户。丢失的 jar 很可能位于“$HOME/.ant/lib”下。总之,常春藤听起来很吓人,但非常值得努力。

标签: ant axis2 wsdl2java


【解决方案1】:

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>

【讨论】:

  • 我已经编辑了问题并以粗体字添加了附加信息以及详细信息。请检查并推荐可能的解决方案。我们对创建用户帐户进行了细微更改。之后,一切都停止工作。以前它运行良好。
  • 您是否尝试过使用我建议的解决方案?这是在运行时管理 ANT 类路径的问题。 Ivy 是您的终极解决方案,因为它使您的构建独立并且不受用户环境之间差异的影响。仔细检查我的例子。如果缺少它,它甚至会自动安装 ivy :-)
【解决方案2】:

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

一个简单的方法-但不推荐-是把所有的axis jars放在ANT_HOME/lib中,但这会污染ant core安装。最好按照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 的描述创建您自己的启动脚本

【讨论】:

  • 我已经编辑了问题并以粗体字添加了附加信息以及详细信息。请检查并推荐可能的解决方案。我们对创建用户帐户进行了细微更改。之后一切都停止工作。以前它运行良好。
【解决方案3】:

平台:Ubuntu 16.04 LTS

首先,要使该声明有效,您需要使用 Axis 1(下载:here)而不是 Axis 2。
然后按照说明here 指定要使用的类路径等。
在此之前,必须在二进制安装根目录的build.xml 中手动设置axis.home 属性,即/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 不同,在我的情况下是 ${axis.home}/lib。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    • 1970-01-01
    • 2013-11-28
    • 2020-09-27
    • 2018-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多