LoginSignup
6
6

More than 5 years have passed since last update.

SVN上フォルダに対応するGradleタスクの動的定義

Last updated at Posted at 2014-03-30

概要

Gradleのタスク動的定義を試したのでメモ。
今回はSubversionのリポジトリ上のフォルダに対応するタスクを定義してみる。

やり方

タスクの動的生成

Gradle日本語ドキュメントを参考に次のメソッドを作ってみたので抜粋。
指定した名前のタスクを定義してくれる。

build.gradle
// タスクを定義
void createTask( List taskNames ) {
    for( String name : taskNames ) {
        task "${name}" << {
            println "task[${name}]"
        }
    }
}

SVNのフォルダ名取得

SVNのフォルダ名を取ってくるメソッドを作成。
SVN操作にはSVNKitを使用。
以下抜粋。

build.gradle
// リポジトリ上に存在するフォルダ名リストを取得
List getSVNList( String repoUrl,
                 String userName,
                 String password ) {
    def manager = SVNClientManager.newInstance(
                        SVNWCUtil.createDefaultOptions(true),
                        userName,
                        password)
    def client = manager.getLogClient();

    def dirList = new ArrayList<String>();
    def dirHandler = new ISVNDirEntryHandler() {
        public void handleDirEntry(SVNDirEntry dirEntry) {
            if(!dirEntry.getName().equals("")) {
                dirList.add(dirEntry.getName());
            }
        }
    };

    client.doList(
        SVNURL.parseURIDecoded(repoUrl),
        SVNRevision.HEAD,
        SVNRevision.HEAD,
        false,
        dirHandler );

    return dirList;
}

ソース

ソースは次の通り。

build.gradle
import org.tmatesoft.svn.core.*
import org.tmatesoft.svn.core.wc.*

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'org.tmatesoft.svnkit:svnkit:1.7.8'
    }

}

// リポジトリの情報
def svnList = ["url1","url2"]
def userName = "user"
def password = "password"

setup(svnList, userName, password)

// リポジトリ上に存在するフォルダ名に対応するタスクを定義
private void setup( List<String> baseUrlList,
                    String userName,
                    String password ) {
    for(String baseUrl : baseUrlList) {
        createTask(getSVNList(baseUrl, userName, password))
    }

}

// リポジトリ上に存在するフォルダ名リストを取得
List getSVNList( String repoUrl,
                         String userName,
                         String password ) {
    def manager = SVNClientManager.newInstance(
                        SVNWCUtil.createDefaultOptions(true),
                        userName,
                        password)
    def client = manager.getLogClient()

    def dirList = new ArrayList<String>()
    def dirHandler = new ISVNDirEntryHandler() {
        public void handleDirEntry(SVNDirEntry dirEntry) {
            if(!dirEntry.getName().equals("")) {
                dirList.add(dirEntry.getName())
            }
        }
    }

    client.doList(
        SVNURL.parseURIDecoded(repoUrl),
        SVNRevision.HEAD,
        SVNRevision.HEAD,
        false,
        dirHandler )

    return dirList
}

// タスクを定義
void createTask( List taskNames ) {
    for( String name : taskNames ) {
        task "${name}" << {
            println "task[${name}]"
        }
    }
}

まとめ

SVNのフォルダに対応するタスクを動的に定義できた。
リポジトリ上フォルダのZIP圧縮はよくやる作業なので、タスク内で圧縮するようにしたら楽できそう。

あと、Javaは知ってるけどGroovyが全然分かんない。
多分もっと簡潔に書けるんだろうなぁ。

6
6
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
6
6