1

次の要件があります。私のプロジェクトには、一連のgoogle protobufスキーマファイル(.proto)をホストするディレクトリがあります。.protoファイルは、アプリケーションが通信する他のプロジェクトと同期している必要があるため、ローカルと「リモート」の.protoファイルが同一であることを検証するANTビルドタスクが必要です。

プロジェクトディレクトリ構造の例を次に示します。

${project.root}
  etc
     refData
       refdata.proto
     marketData
       md.proto

ANTタスクは、ファイルパスをプロパティ名にマップします。次に、プロパティを使用してリモートパスを検索します。上記のサンプルディレクトリでは、etcディレクトリの下にある各.protoファイルを次のプロパティにマップできるはずです。

refdata.refdata.proto=[configure remote path here]
marketdata.md.proto=[configure remote path here]

私はANTにそれほど精通していませんが、上記を達成するためにどのタスクを使用する必要がありますか?

4

2 に答える 2

0
<?xml version="1.0" encoding="UTF-8" ?>
<project default="all" basedir="."> 
    <target name="all">
        <property name="project.root" value="c:\" />
        <property name="refdata.refdata.proto" value="${project.root}etc\refData\refdata.proto" />
        <echo message="refdata.refdata.proto = ${refdata.refdata.proto}" />
        <property name="marketdata.md.proto" value="${project.root}etc\marketData\md.proto" />
        <echo message="marketdata.md.proto = ${refdata.refdata.proto}" />
    </target>
</project>
于 2013-02-25T20:33:09.463 に答える
0

ファイル構造:

.
├── build.xml
├── etc
│   ├── a
│   │   └── aa.proto
│   └── b
│       └── bb.proto
└── some.properties

一部のプロパティ:

a.aa.proto=propa
b.bb.proto=propb

build.xml:

<project name="a" default="props" basedir=".">

    <!-- define file containing *.proto propterties -->
    <property name="prop.file" value="some.properties" />

    <target name="props">

        <echo>props file: ${prop.file}</echo>

        <!-- create an OR regex based on file names
            while stripping the path prefix -->
        <pathconvert property="proto.files" pathsep="|">
            <map from="${basedir}/etc/" to="" />
            <fileset dir="${basedir}">
                <include name="**/*.proto" />
            </fileset>
        </pathconvert>
        <echo>proto files: ${proto.files}</echo>

        <!-- load converted regex into new property -->
        <loadresource property="proto.props">
            <!-- use property as a resource, avoids temp files -->
            <propertyresource name="proto.files" />
            <!-- replace / with . -->
            <filterchain>
                <tokenfilter>
                    <filetokenizer />
                    <replacestring from="/" to="." />
                </tokenfilter>
            </filterchain>
        </loadresource>
        <echo>proto props: ${proto.props}</echo>

        <!-- load properties matching the regex -->
        <loadproperties srcfile="${prop.file}">
            <filterchain>
                <containsregex pattern="${proto.props}" />
            </filterchain>
        </loadproperties>

        <!-- confirm -->
        <echo>a:${a.aa.proto}</echo>
        <echo>b:${b.bb.proto}</echo>
    </target>
</project>

ビルド出力:

Buildfile: /tmp/a/build.xml

props:
     [echo] props file: some.properties
     [echo] proto files: a/aa.proto|b/bb.proto
     [echo] proto props: a.aa.proto|b.bb.proto
     [echo] a:propa
     [echo] b:propb

BUILD SUCCESSFUL
Total time: 1 second
于 2013-03-17T05:13:42.837 に答える