2011-10-11 3 views
2

次のコマンドを使用して、mysqlコマンドを使用して一連のsqlファイルをインポートします。Antはファイルセットとファイルをコマンド入力として適用します

<apply dir="${basedir}" executable="mysql" failonerror="true" parallel="true"> 
    <arg value="-u${db.main.user}" /> 
    <arg value="-p${db.main.password}" /> 
    <arg value="-P${db.main.port}" /> 
    <arg value="-h${db.main.host}" /> 
    <arg value="-D${db.main.database}" /> 
    <srcfile/> 

    <fileset dir="${db.main.path_to_dump}"> 
     <filename name="keyword_category_rel.sql"/> 
     <filename name="keyword_classification.sql"/> 
    </fileset> 
</apply> 

問題は、mysqlコマンドがファイルではなくコマンド入力としてファイルをパラメータとして使用していることです。では、ファイルセットからファイルを入力として入力する方法はありませんか?

もう1つのオプションは、ファイルからsqlコードを受け入れる-e引数を使用することですが、ファイルセットリストのファイルからプロパティにデータを読み取るにはどうすればよいですか。

答えて

0

別のユーザーが同じ理由でAnt run command with pipesについて尋ねました。たぶんそこの解決策があなたの問題を解決するでしょう。あなたが入力redirectorを使用することができますapplyタスク内の各「イテレータ」ファイルの内容を渡すに

<project name="demo" xmlns:fl="antlib:it.haefelinger.flaka"> 

<!-- define your fileset --> 
<fileset dir="${db.main.path_to_dump}" id="foobar"> 
    <filename name="keyword_category_rel.sql"/> 
    <filename name="keyword_classification.sql"/> 
</fileset> 

<!-- call exec for every file in your fileset --> 
<fl:for var="file" in="split('${toString:foobar}', ';')"> 
    <exec executable="mysql" dir="${basedir}/${build}" input="#{file}"> 
    <arg value="-u${db.main.user}"/> 
    <arg value="-p${db.main.password}"/> 
    <arg value="-P${db.main.port}"/> 
    <arg value="-h${db.main.host}"/> 
    <arg value="-D${db.main.database}"/> 
    </exec> 
</fl:for> 

</project> 
+0

私の問題は、私はファイルセットを使用することです。問題は、私はbashの実行を使用することはできませんので、私はsrcfileプロパティにアクセスすることができないということです –

0

はそのようなAnt addon Flakaが提供するforループと組み合わせるのexecタスクを試してみてください。例えば:

<apply executable="${mysql}" addsourcefile="false"> 
    <fileset dir="${sql.dir}" /> 
    <redirector> 
     <inputmapper type="glob" from="*" to="${sql.dir}/*" /> 
    </redirector> 
</apply> 

mysql呼び出しの入力ストリームとしてsql.dir下に各ファイルを処理します。 私はすべてのmysql資格argsを省略しました。彼らは必要になるでしょう。あなたの例では

あなたは、ファイルセットの2つのfilenameの要素を指定しますが、どちらも任意のワイルドカードが含まれています - filesetドキュメントにそれが言うことに注意してください:ファイルセット内のセレクタのいずれかのファイルを選択しない場合

をファイル はFileSetの一部とはみなされません。これにより、ファイルセット は<and>セレクタコンテナに相当します。

だからあなたの例のファイルセットは、実際にゼロファイルと一致します。

また、これにはAnt sql taskを使用することもできます。

4

関連する問題