2

次のデモスクリプトを使用しています。

<?xml version="1.0" encoding="UTF-8"?>
<project name="test" basedir="." xmlns:deploy="antlib:net.sf.antcontrib">
    <target name="default">
        <taskdef resource="net/sf/antcontrib/antlib.xml">
            <classpath>
                <pathelement location="lib/ant-contrib-1.0b3.jar"/>
            </classpath>
        </taskdef>
        <deploy:if>
            <isset property="defaultprop"/>
            <then>
                <echo message="it's set!"/>
            </then>
        </deploy:if>
    </target>
</project>

このビルドスクリプトを(ターゲットを使用してdefault)実行すると、エラーは次のようになります。

build.xml:9: Problem: failed to create task or type antlib:net.sf.antcontrib:if

pathelementlib/ant-contrib-1.0b3.jarが存在し、antがそれを取得しています。問題は、xmlnsの使用方法にあると思います。私はこれを私が持っている別の例から取っていますが、それも私には機能しません(ただし、特定のサーバーでは機能します!)、そして魔法のソースが何であるかを理解しようとしています。

4

2 に答える 2

9

ant-contribを追加するtaskdefは、プロジェクトで定義してプレフィックスを付ける名前空間と同じURIを宣言する必要があります。ここでのtaskdefの動作と同様です。

<project name="test" basedir="." xmlns:deploy="antlib:net.sf.antcontrib">
    <target name="default">
        <taskdef uri="antlib:net.sf.antcontrib" resource="net/sf/antcontrib/antlib.xml">
            <classpath>
                <pathelement location="lib/ant-contrib-1.0b3.jar"/>
            </classpath>
        </taskdef>
        <deploy:if>
            <isset property="defaultprop"/>
            <then>
                <echo message="it's set!"/>
            </then>
        </deploy:if>
    </target>
</project>
于 2013-02-28T17:16:12.867 に答える
0

エラーはif最後にあり、9行目について話している。このタグの構文に問題があると思う。

    <deploy:if>

「deploy:if」タグ、または「deploy」タグに関するドキュメントが見つかりません。Antには「デプロイ」タスクはないと思います。「デプロイ」ターゲットを作成する必要があります。

これを試してみませんか:

  <if>
    <isset property="defaultprop"/>
    <then>
      <antcall target="deploy" />
    </then>
  </if>

私が読んでいると、これはissetをチェックし、設定されている場合は「deploy」ターゲットを呼び出します。もちろん、今すぐ「デプロイ」ターゲットを作成する必要があります:)

于 2013-02-28T17:08:22.763 に答える