-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathbuild.gradle
166 lines (140 loc) · 5.38 KB
/
build.gradle
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
buildscript {
ext {
springBootVersion = '1.2.7.RELEASE'
}
repositories {
jcenter()
maven { url "http://repo.spring.io/repo/" }
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
classpath("io.spring.gradle:dependency-management-plugin:0.5.3.RELEASE")
// for Grgit
classpath("org.ajoberstar:grgit:1.4.1")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'spring-boot'
apply plugin: 'io.spring.dependency-management'
sourceCompatibility = 1.8
targetCompatibility = 1.8
compileJava.options.compilerArgs = ['-Xlint:all']
// for Doma 2
// JavaクラスとSQLファイルの出力先ディレクトリを同じにする
processResources.destinationDir = compileJava.destinationDir
// コンパイルより前にSQLファイルを出力先ディレクトリにコピーするために依存関係を逆転する
compileJava.dependsOn processResources
jar {
baseName = 'springboot-doma2-template'
version = '0.0.1-SNAPSHOT'
}
eclipse {
classpath {
containers.remove('org.eclipse.jdt.launching.JRE_CONTAINER')
containers 'org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8'
}
}
idea {
module {
inheritOutputDirs = false
outputDir = file("$buildDir/classes/main/")
}
}
configurations {
domaGenRuntime
}
repositories {
jcenter()
}
dependencies {
def jdbcDriver = "org.postgresql:postgresql:9.4-1204-jdbc41"
def domaVersion = "2.5.1"
// spring-boot-gradle-plugin によりバージョン番号が自動で設定されるもの
// Appendix E. Dependency versions ( http://docs.spring.io/spring-boot/docs/current/reference/html/appendix-dependency-versions.html ) 参照
compile("org.springframework.boot:spring-boot-starter-web")
compile("org.springframework.boot:spring-boot-starter-thymeleaf")
compile("org.springframework.boot:spring-boot-starter-data-jpa")
compile("org.codehaus.janino:janino")
testCompile("org.springframework.boot:spring-boot-starter-test")
// spring-boot-gradle-plugin によりバージョン番号が自動で設定されないもの
compile("${jdbcDriver}")
compile("org.seasar.doma:doma:${domaVersion}")
compile("org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16")
compile("org.apache.commons:commons-lang3:3.4")
compile("org.projectlombok:lombok:1.16.6")
testCompile("org.dbunit:dbunit:2.5.1")
testCompile("org.assertj:assertj-core:3.2.0")
testCompile("org.jmockit:jmockit:1.19")
// for Doma-Gen
domaGenRuntime("org.seasar.doma:doma-gen:${domaVersion}")
domaGenRuntime("${jdbcDriver}")
}
bootRun {
jvmArgs = ['-Dspring.profiles.active=develop']
}
test {
jvmArgs = ['-Dspring.profiles.active=unittest']
}
// for Doma-Gen
task domaGen << {
// まず変更が必要なもの
def rootPackageName = 'project.webapp'
def daoPackagePath = 'src/main/java/project/webapp/dao'
def dbUrl = 'jdbc:postgresql://localhost/ksbylending'
def dbUser = 'ksbylending_user'
def dbPassword = 'xxxxxxxx'
def tableNamePattern = '.*'
// おそらく変更不要なもの
def importOfComponentAndAutowiredDomaConfig = "${rootPackageName}.util.doma.ComponentAndAutowiredDomaConfig"
def workDirPath = 'work'
def workDaoDirPath = "${workDirPath}/dao"
// 作業用ディレクトリを削除する
clearDir("${workDirPath}")
// 現在の Dao インターフェースのバックアップを取得する
copy() {
from "${daoPackagePath}"
into "${workDaoDirPath}/org"
}
// Dao インターフェース、Entity クラスを生成する
ant.taskdef(resource: 'domagentask.properties',
classpath: configurations.domaGenRuntime.asPath)
ant.gen(url: "${dbUrl}", user: "${dbUser}", password: "${dbPassword}", tableNamePattern: "${tableNamePattern}") {
entityConfig(packageName: "${rootPackageName}.entity", useListener: false)
daoConfig(packageName: "${rootPackageName}.dao")
sqlConfig()
}
// 生成された Dao インターフェースを作業用ディレクトリにコピーし、
// @ComponentAndAutowiredDomaConfig アノテーションを付加する
copy() {
from "${daoPackagePath}"
into "${workDaoDirPath}/replace"
filter {
line -> line.replaceAll('import org.seasar.doma.Dao;', "import ${importOfComponentAndAutowiredDomaConfig};\nimport org.seasar.doma.Dao;")
.replaceAll('@Dao', '@Dao\n@ComponentAndAutowiredDomaConfig')
}
}
// @ComponentAndAutowiredDomaConfig アノテーションを付加した Dao インターフェースを
// dao パッケージへ戻す
copy() {
from "${workDaoDirPath}/replace"
into "${daoPackagePath}"
}
// 元々 dao パッケージ内にあったファイルを元に戻す
copy() {
from "${workDaoDirPath}/org"
into "${daoPackagePath}"
}
// 作業用ディレクトリを削除する
clearDir("${workDirPath}")
// 自動生成したファイルを git add する
addGit()
}
void clearDir(String dirPath) {
delete dirPath
}
void addGit() {
def grgit = org.ajoberstar.grgit.Grgit.open(dir: project.projectDir)
grgit.add(patterns: ['.'])
}