-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbuild.xml
More file actions
240 lines (211 loc) · 10.9 KB
/
build.xml
File metadata and controls
240 lines (211 loc) · 10.9 KB
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
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
<?xml version="1.0" encoding="UTF-8"?>
<project name="car-dealership" default="help" basedir="."
xmlns:ivy="antlib:org.apache.ivy.ant">
<!-- =================== Свойства =================== -->
<property name="db.dir" value="data"/>
<property name="db.name" value="car_dealership"/>
<property name="db.driver" value="org.hsqldb.jdbc.JDBCDriver"/>
<property name="db.url" value="jdbc:hsqldb:file:${db.dir}/${db.name};shutdown=true"/>
<property name="db.user" value="sa"/>
<property name="db.password" value=""/>
<property name="schema.file" value="db/schema.sql"/>
<property name="seed.file" value="db/seed.sql"/>
<!-- Каталоги Java-проекта -->
<property name="src.main" value="src/main/java"/>
<property name="src.test" value="src/test/java"/>
<property name="res.main" value="src/main/resources"/>
<property name="res.test" value="src/test/resources"/>
<property name="build.dir" value="build"/>
<property name="classes.dir" value="${build.dir}/classes"/>
<property name="test.classes" value="${build.dir}/test-classes"/>
<property name="lib.dir" value="lib"/>
<property name="report.dir" value="${build.dir}/test-reports"/>
<!-- =================== Ivy : resolve =================== -->
<target name="resolve" description="Скачать зависимости через Ivy">
<ivy:retrieve pattern="${lib.dir}/[conf]/[artifact]-[revision].[ext]" sync="true"/>
</target>
<!-- =================== Classpaths =================== -->
<path id="compile.classpath">
<fileset dir="${lib.dir}/compile" erroronmissingdir="false">
<include name="*.jar"/>
</fileset>
</path>
<path id="test.classpath">
<path refid="compile.classpath"/>
<fileset dir="${lib.dir}/test" erroronmissingdir="false">
<include name="*.jar"/>
</fileset>
<pathelement location="${classes.dir}"/>
<pathelement location="${test.classes}"/>
<pathelement location="${res.main}"/>
<pathelement location="${res.test}"/>
</path>
<path id="db.classpath">
<fileset dir="${lib.dir}/compile" erroronmissingdir="false">
<include name="hsqldb*.jar"/>
</fileset>
</path>
<!-- Макрос для выполнения SQL-файла -->
<macrodef name="run-sql-file">
<attribute name="src"/>
<sequential>
<sql driver="${db.driver}" url="${db.url}"
userid="${db.user}" password="${db.password}"
autocommit="true" onerror="abort"
delimiter=";" encoding="UTF-8">
<classpath refid="db.classpath"/>
<transaction src="@{src}"/>
</sql>
</sequential>
</macrodef>
<!-- Макрос для вывода результата SELECT-запроса -->
<macrodef name="show-table">
<attribute name="label"/>
<text name="query"/>
<sequential>
<echo message="=== @{label} ==="/>
<sql driver="${db.driver}" url="${db.url}"
userid="${db.user}" password="${db.password}"
autocommit="true" onerror="abort"
print="yes" showheaders="true" showtrailers="true"
delimiter=";" encoding="UTF-8">
<classpath refid="db.classpath"/>
<transaction>@{query}</transaction>
</sql>
</sequential>
</macrodef>
<target name="help" description="Показать список основных задач">
<echo message="Доступные задачи:"/>
<echo message=" ant resolve - скачать зависимости (Ivy)"/>
<echo message=" ant compile - скомпилировать исходный код"/>
<echo message=" ant compile-tests - скомпилировать тесты"/>
<echo message=" ant test - запустить TestNG-тесты"/>
<echo message=" ant create-db - создать структуру БД"/>
<echo message=" ant init-db - создать структуру и заполнить тестовыми данными"/>
<echo message=" ant show-db - вывести содержимое БД"/>
<echo message=" ant clear-db - удалить файлы БД"/>
<echo message=" ant reset-db - полностью пересоздать БД и заполнить ее"/>
<echo message=" ant clean - удалить каталог сборки"/>
<echo message=" ant clean-all - удалить сборку и БД"/>
</target>
<target name="prepare" description="Подготовить каталоги">
<mkdir dir="${db.dir}"/>
</target>
<target name="create-db" depends="prepare" description="Создать структуру БД">
<echo message="Создание структуры БД..."/>
<run-sql-file src="${schema.file}"/>
</target>
<target name="init-db" depends="create-db" description="Заполнить БД тестовыми данными">
<echo message="Инициализация БД тестовыми данными..."/>
<run-sql-file src="${seed.file}"/>
</target>
<target name="show-db" depends="prepare" description="Вывести содержимое БД">
<show-table label="CAR_BRANDS">
SELECT brand_id, brand_name, manufacturer_name
FROM car_brands ORDER BY brand_id;
</show-table>
<show-table label="CARS">
SELECT c.car_id, b.brand_name, c.registration_number,
c.transmission_type, c.price, c.mileage_km
FROM cars c JOIN car_brands b ON b.brand_id = c.brand_id
ORDER BY c.car_id;
</show-table>
<show-table label="CLIENTS">
SELECT client_id, full_name, phone, email
FROM clients ORDER BY client_id;
</show-table>
<show-table label="ORDERS">
SELECT o.order_id, o.ordered_at, cl.full_name,
o.status, o.need_test_drive, o.car_id
FROM orders o JOIN clients cl ON cl.client_id = o.client_id
ORDER BY o.order_id;
</show-table>
<show-table label="ORDER_REQUIREMENTS">
SELECT order_id, desired_brand_id,
desired_transmission_type, desired_price_max
FROM order_requirements ORDER BY order_id;
</show-table>
<show-table label="TEST_DRIVES">
SELECT td.test_drive_id, cl.full_name,
c.registration_number, td.test_drive_at
FROM test_drives td
JOIN clients cl ON cl.client_id = td.client_id
JOIN cars c ON c.car_id = td.car_id
ORDER BY td.test_drive_id;
</show-table>
</target>
<target name="clear-db" description="Удалить файлы БД">
<echo message="Удаление файлов БД..."/>
<delete dir="${db.dir}" failonerror="false"/>
</target>
<target name="reset-db" depends="clear-db,init-db" description="Полностью пересоздать БД и заполнить ее"/>
<!-- =================== Компиляция =================== -->
<target name="compile" depends="resolve" description="Скомпилировать исходный код">
<mkdir dir="${classes.dir}"/>
<javac srcdir="${src.main}" destdir="${classes.dir}"
includeantruntime="false" encoding="UTF-8" source="1.8" target="1.8"
debug="true" debuglevel="lines,vars,source">
<classpath refid="compile.classpath"/>
</javac>
<copy todir="${classes.dir}">
<fileset dir="${res.main}"/>
</copy>
</target>
<target name="compile-tests" depends="compile" description="Скомпилировать тесты">
<mkdir dir="${test.classes}"/>
<javac srcdir="${src.test}" destdir="${test.classes}"
includeantruntime="false" encoding="UTF-8" source="1.8" target="1.8">
<classpath refid="test.classpath"/>
</javac>
<copy todir="${test.classes}">
<fileset dir="${res.test}"/>
</copy>
</target>
<!-- =================== Тесты =================== -->
<target name="test" depends="compile-tests" description="Запустить TestNG-тесты">
<mkdir dir="${report.dir}"/>
<taskdef name="testng" classname="org.testng.TestNGAntTask" classpathref="test.classpath"/>
<testng classpathref="test.classpath"
outputdir="${report.dir}"
haltonfailure="true">
<xmlfileset dir="${res.test}" includes="testng.xml"/>
</testng>
</target>
<!-- =================== JaCoCo покрытие =================== -->
<target name="test-coverage" depends="compile-tests" description="Тесты с покрытием JaCoCo">
<mkdir dir="${report.dir}"/>
<taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml" classpathref="test.classpath"/>
<jacoco:coverage xmlns:jacoco="antlib:org.jacoco.ant" destfile="${build.dir}/jacoco.exec">
<java classname="org.testng.TestNG" fork="true" failonerror="true">
<classpath refid="test.classpath"/>
<arg value="${res.test}/testng.xml"/>
</java>
</jacoco:coverage>
</target>
<target name="coverage-report" depends="test-coverage" description="Сгенерировать HTML-отчёт покрытия">
<taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml" classpathref="test.classpath"/>
<jacoco:report xmlns:jacoco="antlib:org.jacoco.ant">
<executiondata>
<file file="${build.dir}/jacoco.exec"/>
</executiondata>
<structure name="Car Dealership DAO Coverage">
<classfiles>
<fileset dir="${classes.dir}">
<include name="ru/msu/cmc/webprac/dao/**/*.class"/>
</fileset>
</classfiles>
<sourcefiles encoding="UTF-8">
<fileset dir="${src.main}"/>
</sourcefiles>
</structure>
<html destdir="${build.dir}/coverage-report"/>
<csv destfile="${build.dir}/coverage-report/coverage.csv"/>
</jacoco:report>
<echo message="Отчёт покрытия: ${build.dir}/coverage-report/index.html"/>
</target>
<!-- =================== Очистка =================== -->
<target name="clean" description="Удалить каталог сборки">
<delete dir="${build.dir}"/>
</target>
<target name="clean-all" depends="clean,clear-db" description="Удалить сборку и БД"/>
</project>