build.gradleの設定で困ったこととかのメモ

Gradle を使ってて、 build.gradle の設定で困ったこととか、色々調べたこととかがあれば、随時メモしていく。　　　　と思う。

#プログラムのインストールディレクトリを参照する
```groovy:build.gradle
apply plugin: 'application'

mainClassName = 'sample.Main'

startScripts.with {
    doLast {
        unixScript.text = unixScript.text.replaceFirst('(?<=DEFAULT_JVM_OPTS=)((\'|\")(.*)(\'|"))(?=\n)',
                '\'$3 "-Dapp.home=\\$APP_HOME"\'')
        windowsScript.text = windowsScript.text.replaceFirst('(?<=DEFAULT_JVM_OPTS=)(.*)(?=\r\n)',
                '$1 "-Dapp.home=%~dp0.."')
    }
}
```

```java:Main.java
package sample;

public class Main {
    public static void main(String... args) {
        System.out.println("os = " + System.getProperty("os.name"));
        System.out.println("app.home = " + System.getProperty("app.home"));
    }
}
```

```text:実行結果（Windows）
os = Windows 7
app.home = f:\tmp\gradle\test\build\install\test\bin\..
```

```text:実行結果（Linux）
os = Linux
app.home = /vagrant/gradle
```

[java - How to pass a reference to distribution home directory using Gradle application plugin? - Stack Overflow](http://stackoverflow.com/questions/25227198/how-to-pass-a-reference-to-distribution-home-directory-using-gradle-application)

#Eclipse まわり
##プロジェクトの文字コード設定
```groovy:
eclipseJdt << {
    File f = file('.settings/org.eclipse.core.resources.prefs')
    f.write('eclipse.preferences.version=1\n')
    f.append('encoding/<project>=utf-8')
}
```

[making eclipse wtp project with gradle - Stack Overflow](http://stackoverflow.com/questions/16294353/making-eclipse-wtp-project-with-gradle)

##外部ライブラリを追加する

```groovy:
eclipse {
    classpath {
        containers 'GROOVY_DSL_SUPPORT', 'GROOVY_SUPPORT'
    }
}
```

例は、 Groovy を追加した場合。

__参考__

- [EclipseClasspath - Gradle DSL Version 2.0](http://www.gradle.org/docs/current/dsl/org.gradle.plugins.ide.eclipse.model.EclipseClasspath.html)

##TypeScript プラグインをプロジェクト設定で有効にする
[これ](https://github.com/palantir/eclipse-typescript) をプロジェクト設定で有効になるようにする。

```groovy:
eclipse {
    project {
        buildCommand 'com.palantir.typescript.typeScriptBuilder'
        natures 'com.palantir.typescript.typeScriptNature'
    }
}

tasks.eclipse << {
    println file('.settings/com.palantir.typescript.prefs').withWriter {writer ->
        writer << """\
                  |build.path.sourceFolder=src/main/ts
                  |compiler.outputDirOption=bin/ts
                  |compiler.outputFileOption=
                  |eclipse.preferences.version=1
                  |""".stripMargin()
    }
}
```

__参考__

- [Slim3+JPP+Eclipse 用のbuild.gradleを頑張って書いた…。今んとここれで多分いいに違いない。誰か詳しい人、もっとかっこよくしてくりー〜〜〜](https://gist.github.com/vvakame/5176993)
- [gradle-user - Best Practices on extending Eclipse file generation.](http://gradle.1045684.n5.nabble.com/Best-Practices-on-extending-Eclipse-file-generation-td5161066.html)

##ソースフォルダのデフォルトの出力先を変更する
```groovy:
eclipse {
    classpath {
        defaultOutputDir = file('path/to/output')
    }
}
```

__参考__

- [EclipseClasspath - Gradle DSL Version 1.11-20131203060736+0000](http://gradle.monochromeroad.com/docs/dsl/org.gradle.plugins.ide.eclipse.model.EclipseClasspath.html)

##ソースフォルダごとに、コンパイル結果の出力先を変更する
```groovy:
import org.gradle.plugins.ide.eclipse.model.SourceFolder 

eclipse {
    classpath {
        file.whenMerged {cp ->
            cp.entries.findAll { it instanceof SourceFolder && it.path.startsWith("src/test/") }*.output = "path/to/output"
        }
    }
}
```

__参考__

- [gradle-user - Changing Eclipse output directory for production and tests](http://gradle.1045684.n5.nabble.com/Changing-Eclipse-output-directory-for-production-and-tests-td4691719.html)