0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Antの代表的なフィルタリーダー

Posted at

記事の概要

Antのファイルリーダのうち、
ビルド作業において使用頻度の高いテキスト置換を行うものをピックアップし、
サンプルコードとともに紹介します。

ExpandProperties

実装クラス:org.apache.tools.ant.filters.ExpandProperties

テキストファイル内で使用されているAntのプロパティ${....}を、
該当するプロパティの値(実行時に内部で置き換えられている値)に置換します。
設定できる属性はないので、タグのみ記載します。

<filterchain>
  <expandproperties/>
</filterchain>
# ビルドファイルでのプロパティの定義
<property name="path.lib" location="WebContent/WEB-INF/lib" />
# 置換前
libDir = "/project/${path.lib}/libdir"
# 置換後
libDir = "/project/WebContent/WEB-INF/lib/libdir"

HeadFilter

実装クラス:org.apache.tools.ant.filters.HeadFilter

テキストファイルの先頭から指定した行数のテキストを切り出します。
クラスファイルからパッケージ名だけを取り出したりできます。

属性 説明 初期値
lines 取り出す行数を指定します。 10
skip 先頭から指定した行数までをスキップします。 0
<filterchain>
  <headfilter lines="1"/>
</filterchain>
# 置換前
package com.example.app;

import ...
# 置換後
package com.example.app;

TailFilter

実装クラス:org.apache.tools.ant.filters.TailFilter

テキストファイルの最後から指定した行数のテキストを切り出します。
クラスファイルのリターン句のみ取り出したりできます。

属性 説明 初期値
lines 取り出す行数を指定します。 10
skip 末尾から指定した行数までをスキップします。 0
<filterchain>
  <headfilter lines="1" skip="2"/>
</filterchain>
# 置換前
    ...
    return output;
  }
}[EOF]
# 置換後
    return output;

LineContains

実装クラス:org.apache.tools.ant.filters.LineContains

指定した文字列が含まれている行を抽出します。
文字列はContains子要素のvalue属性で指定します。Contains子要素を複数指定すると、
指定したすべての文字列が含まれる行のみが抽出されます。

属性・要素 説明 補足
contains value属性に文字列を指定します。
negate trueに設定すると、指定文字列が含まれない行を抽出します。 Ant1.7〜
<linecontains>
  <contains value="foo"/>
  <contains value="bar"/>
</linecontains>
<!-- negate指定時 -->
<linecontains negate="true">
  <contains value="foo"/>
  <contains value="bar"/>
</linecontains>
# 置換前
foo text
sample text
bar text
# 置換後
foo text
bar text

LineContainsRegExp

実装クラス:org.apache.tools.ant.filters.LineContainsRegExp

LineContainsの文字列マッチ条件として正規表現を利用できます。
条件はRegexp子要素のpattern属性で指定します。

属性・要素 説明 補足 必須
regexp pattern属性に正規表現を指定します。
negate trueに設定すると、指定文字列が含まれない行を抽出します。 Ant1.7〜
casesensitive 大文字、小文字を区別するかを指定します。(default:true) Ant1.8.2〜
<linecontainsregexp>
  <!-- 行頭がfooで始まる行のみ指定 -->
  <regexp pattern="^foo"/>
</linecontainsregexp>
# 置換前
foo text
sample text
text foo
# 置換後
foo text

PrefixLines

実装クラス:org.apache.tools.ant.filters.PrefixLines

テキストファイルの各行の先頭に文字列を挿入します。
ファイル全体のコメントアウトなどに使用できます。

属性 説明
prefix 行頭に挿入する文字列を指定します。
<linecontainsregexp>
  <prefixlines prefix="// "/>
</linecontainsregexp>
# 置換前
foo text
bar text
# 置換後
// foo text
// bar text

ReplaceTokens

実装クラス:org.apache.tools.ant.filters.ReplaceTokens

フィルタセットと同じようにトークンの置換を行います。
Token子要素によりトークンを指定します。Token子要素では、key属性にトークン文字列、
value属性に置換後の文字列を指定します。

属性 説明 初期値
begintoken トークンの開始区切り文字を指定します。 @
endtoken トークンの終了区切り文字を指定します。 @
区切り文字に設定できるのは1文字だけです。
2文字以上指定しても、最初の1文字が区切り文字になります。
<filterchain>
  <replacetokens begintoken="{" endtoken="}">
    <token key="config-pre-name" value="config-"/>
  </replacetokens>
</filterchain>
# 置換前
{config-pre-name}setting.xml
# 置換後
config-setting.xml

StripJavaComments

実装クラス:org.apache.tools.ant.filters.StripJavaComments

Javaソースファイルで用いられるコメントをすべて取り除きます。(/* */および//
リリースモジュールからコメントを除外し、ファイルサイズを下げるなどが可能です。

<filterchain>
  <stripjavacomments/>
</filterchain>
# 置換前
/*
 test
 */
public class Test {
    public void method() {
        // test
    }
# 置換後
public class Test {
    public void method() {

    }

StripLineComments

実装クラス:org.apache.tools.ant.filters.StripLineComments

先頭が特定の文字列で始まっている行をコメント行とみなし、そのコメント行を取り除きます。
コメントとみなす文字列はComment子要素のvalue属性により指定します。
最初の文字が設定値でも、先頭にタブやスペースが入っているとコメント行とみなされません。
バッチファイルなど、Java以外のファイルのコメントを除外するのに使えます。

<striplinecomments>
  <comment value="REM "/>
  <comment value="rem "/>
</striplinecomments>
# 置換前
REM do anything
sample
rem end anything
# 置換後
sample

StripLineBreaks

実装クラス:org.apache.tools.ant.filters.StripLineBreaks

テキストファイルから指定した改行文字を取り除きます。(デフォルトは \r と \n )
改行文字はlinebreaks属性で指定できます。linebreaksに複数文字の文字列を指定した場合、
複数文字全体が改行文字と見なされるのではなく、その文字列に含まれる各々の1文字が
改行文字とみなされます。つまり、"あいう"を設定しても、"あいう"が改行文字と見なされる
のではなく、"あ"、"い"、"う"それぞれが改行文字となります。
リリースモジュールから改行を除外し、ファイルサイズを下げたい場合などに使用できます。

<filterreader classname="org.apache.tools.ant.filters.StripLineBreaks">
  <param name="linebreaks" value="()"/>
</filterreader>
# 置換前
sample(and)test()
# 置換後
sampleandtest

TabToSpaces

実装クラス:org.apache.tools.ant.filters.TabToSpaces

テキストファイル中のタブをスペースに置き換えます。
一つのタブをいくつのスペースに置き換えるかは、tablength属性により指定します。

属性 説明 初期値
tablength 置き換えるスペースの数を指定します。 8
<tabstospaces tablength="8"/>
# 置換前
[¥t]sample
# 置換後
・・・・・・・・sample

※タブ文字、半角スペースを可視化するのに「[¥t]」、「・」と表記しています。

終わりに

以上、使用頻度の高いファイルリーダーについて紹介してきました。
公式ドキュメントには、より詳しい情報が載っていますのでそちらも参照してみてください。

参照ページ:公式ドキュメント

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?