Skip to content

Commit 5f1c610

Browse files
committed
Rewrite the build
- do not use fat jar, but proper application bundle - add checkstyle checks - properly set compile encoding and cross-compilation parameter - use Gradle task output cache - update Gradle to 4.10.2 - use improved Gradle POM support
1 parent 05840cf commit 5f1c610

18 files changed

+402
-76
lines changed

Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@ FROM java:8
33
COPY . /usr/src/myapp
44
WORKDIR /usr/src/myapp
55
RUN chmod +x gradlew
6-
RUN ./gradlew jar
6+
RUN ./gradlew installDist
77

8-
CMD java -jar build/libs/bot.jar $TOKEN
8+
CMD build/install/javacord-bot/bin/javacord-bot $TOKEN

build.gradle

Lines changed: 36 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,53 @@
11
plugins {
2-
id 'java'
2+
id 'application'
3+
id 'checkstyle'
34
}
45

56
group 'org.javacord'
6-
version '1.0.0'
7+
description 'The Javacord Bot'
78

89
sourceCompatibility = 1.8
10+
mainClassName = 'org.javacord.bot.Main'
11+
defaultTasks 'build'
912

1013
repositories {
11-
mavenCentral()
14+
jcenter()
1215
maven { url 'https://jitpack.io' }
1316
}
1417

15-
dependencies {
16-
implementation 'org.javacord:javacord:3.0.0'
17-
implementation 'de.btobastian.sdcf4j:sdcf4j-core:v1.0.10'
18-
implementation 'de.btobastian.sdcf4j:sdcf4j-javacord:v1.0.10'
19-
implementation 'org.apache.logging.log4j:log4j-slf4j-impl:2.11.0'
20-
implementation 'com.squareup.okhttp3:okhttp:3.9.1'
21-
implementation 'com.fasterxml.jackson.core:jackson-databind:2.9.3'
18+
ext {
19+
versions = [
20+
checkstyle: '8.14',
21+
javacord : '3.0.0',
22+
sdcf4j : 'v1.0.10',
23+
okhttp : '3.9.1',
24+
jackson : '2.9.3',
25+
log4j : '2.11.1'
26+
]
2227
}
2328

24-
jar {
25-
archiveName = 'bot.jar'
26-
27-
from {
28-
configurations.runtime.collect {
29-
it.isDirectory() ? it : zipTree(it)
30-
}
29+
dependencies {
30+
implementation "org.javacord:javacord:${versions.javacord}"
31+
implementation "de.btobastian.sdcf4j:sdcf4j-javacord:${versions.sdcf4j}"
32+
implementation "de.btobastian.sdcf4j:sdcf4j-core:${versions.sdcf4j}"
33+
implementation "com.squareup.okhttp3:okhttp:${versions.okhttp}"
34+
implementation "com.fasterxml.jackson.core:jackson-databind:${versions.jackson}"
35+
implementation "org.apache.logging.log4j:log4j-api:${versions.log4j}"
36+
37+
runtimeOnly "org.apache.logging.log4j:log4j-core:${versions.log4j}"
38+
runtimeOnly "org.apache.logging.log4j:log4j-slf4j-impl:${versions.log4j}"
39+
}
3140

32-
configurations.runtimeClasspath.collect {
33-
it.isDirectory() ? it : zipTree(it)
41+
tasks.withType(JavaCompile) {
42+
options.encoding 'UTF-8'
43+
if (JavaVersion.current().java9Compatible) {
44+
afterEvaluate {
45+
options.compilerArgs << '--release' << platform.targetCompatibility.majorVersion
3446
}
3547
}
48+
}
3649

37-
manifest {
38-
attributes 'Main-Class': 'org.javacord.bot.Main'
39-
}
40-
41-
exclude 'META-INF/*.RSA', 'META-INF/*.SF','META-INF/*.DSA'
42-
}
50+
checkstyle {
51+
toolVersion versions.checkstyle
52+
maxWarnings 0
53+
}

config/checkstyle/checkstyle.xml

Lines changed: 250 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,250 @@
1+
<?xml version="1.0"?>
2+
<!DOCTYPE module PUBLIC
3+
"-//Puppy Crawl//DTD Check Configuration 1.3//EN"
4+
"http://checkstyle.sourceforge.net/dtds/configuration_1_3.dtd">
5+
6+
<!--
7+
Checkstyle configuration that checks the Javadoc coding conventions.
8+
This is based on the Google checkstyle config by
9+
Max Vetrenko, Ruslan Diachenko and Roman Ivanov.
10+
-->
11+
12+
<module name = "Checker">
13+
<!--<module name="SuppressionFilter">-->
14+
<!--<property name="file" value="${config_loc}/suppressions.xml"/>-->
15+
<!--</module>-->
16+
17+
<property name="charset" value="UTF-8"/>
18+
19+
<property name="severity" value="warning"/>
20+
21+
<!-- Force root Locale to enforce english messages -->
22+
<property name='localeCountry' value='' />
23+
<property name='localeLanguage' value='' />
24+
25+
<property name="fileExtensions" value="java, properties, xml"/>
26+
<!-- Checks for whitespace -->
27+
<!-- See http://checkstyle.sf.net/config_whitespace.html -->
28+
<module name="FileTabCharacter">
29+
<property name="eachLine" value="true"/>
30+
</module>
31+
<module name="TreeWalker">
32+
<module name="OuterTypeFilename"/>
33+
<module name="AvoidStarImport" />
34+
<module name="AvoidStaticImport" />
35+
<module name="CustomImportOrder">
36+
<property name="customImportOrderRules"
37+
value="THIRD_PARTY_PACKAGE###SPECIAL_IMPORTS###STANDARD_JAVA_PACKAGE###STATIC"/>
38+
<property name="specialImportsRegExp" value="^javax\."/>
39+
<property name="standardPackageRegExp" value="^java\."/>
40+
<property name="sortImportsInGroupAlphabetically" value="true"/>
41+
<property name="separateLineBetweenGroups" value="false"/>
42+
</module>
43+
<module name="IllegalTokenText">
44+
<property name="tokens" value="STRING_LITERAL, CHAR_LITERAL"/>
45+
<property name="format" value="\\u00(09|0(a|A)|0(c|C)|0(d|D)|22|27|5(C|c))|\\(0(10|11|12|14|15|42|47)|134)"/>
46+
<property name="message" value="Consider using special escape sequence instead of octal value or Unicode escaped value."/>
47+
</module>
48+
<module name="AvoidEscapedUnicodeCharacters">
49+
<property name="allowEscapesForControlCharacters" value="true"/>
50+
<property name="allowByTailComment" value="true"/>
51+
<property name="allowNonPrintableEscapes" value="true"/>
52+
</module>
53+
<module name="LineLength">
54+
<property name="max" value="120"/>
55+
<property name="ignorePattern" value="^package.*|^import.*|a href|href|http://|https://|ftp://"/>
56+
</module>
57+
<module name="OneTopLevelClass"/>
58+
<module name="NoLineWrap"/>
59+
<module name="EmptyBlock">
60+
<property name="option" value="TEXT"/>
61+
<property name="tokens" value="LITERAL_TRY, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE, LITERAL_SWITCH"/>
62+
</module>
63+
<module name="NeedBraces"/>
64+
<module name="LeftCurly"/>
65+
<module name="RightCurly">
66+
<property name="id" value="RightCurlySame"/>
67+
<property name="tokens" value="LITERAL_TRY, LITERAL_CATCH, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE, LITERAL_DO"/>
68+
</module>
69+
<module name="RightCurly">
70+
<property name="id" value="RightCurlyAlone"/>
71+
<property name="option" value="alone"/>
72+
<property name="tokens" value="CLASS_DEF, METHOD_DEF, CTOR_DEF, LITERAL_FOR, LITERAL_WHILE, STATIC_INIT, INSTANCE_INIT"/>
73+
</module>
74+
<module name="WhitespaceAround">
75+
<property name="allowEmptyConstructors" value="true"/>
76+
<property name="allowEmptyMethods" value="true"/>
77+
<property name="allowEmptyTypes" value="true"/>
78+
<property name="allowEmptyLoops" value="true"/>
79+
<message key="ws.notFollowed"
80+
value="WhitespaceAround: ''{0}'' is not followed by whitespace. Empty blocks may only be represented as '{}' when not part of a multi-block statement (4.1.3)"/>
81+
<message key="ws.notPreceded"
82+
value="WhitespaceAround: ''{0}'' is not preceded with whitespace."/>
83+
</module>
84+
<module name="OneStatementPerLine"/>
85+
<module name="MultipleVariableDeclarations"/>
86+
<module name="ArrayTypeStyle"/>
87+
<module name="MissingSwitchDefault"/>
88+
<module name="FallThrough"/>
89+
<module name="UpperEll"/>
90+
<module name="ModifierOrder"/>
91+
<module name="EmptyLineSeparator">
92+
<property name="allowNoEmptyLineBetweenFields" value="true"/>
93+
</module>
94+
<module name="SeparatorWrap">
95+
<property name="id" value="SeparatorWrapDot"/>
96+
<property name="tokens" value="DOT"/>
97+
<property name="option" value="nl"/>
98+
</module>
99+
<module name="SeparatorWrap">
100+
<property name="id" value="SeparatorWrapComma"/>
101+
<property name="tokens" value="COMMA"/>
102+
<property name="option" value="EOL"/>
103+
</module>
104+
<module name="SeparatorWrap">
105+
<!-- ELLIPSIS is EOL until https://github.com/google/styleguide/issues/258 -->
106+
<property name="id" value="SeparatorWrapEllipsis"/>
107+
<property name="tokens" value="ELLIPSIS"/>
108+
<property name="option" value="EOL"/>
109+
</module>
110+
<module name="SeparatorWrap">
111+
<!-- ARRAY_DECLARATOR is EOL until https://github.com/google/styleguide/issues/259 -->
112+
<property name="id" value="SeparatorWrapArrayDeclarator"/>
113+
<property name="tokens" value="ARRAY_DECLARATOR"/>
114+
<property name="option" value="EOL"/>
115+
</module>
116+
<module name="SeparatorWrap">
117+
<property name="id" value="SeparatorWrapMethodRef"/>
118+
<property name="tokens" value="METHOD_REF"/>
119+
<property name="option" value="nl"/>
120+
</module>
121+
<module name="PackageName">
122+
<property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$"/>
123+
<message key="name.invalidPattern"
124+
value="Package name ''{0}'' must match pattern ''{1}''."/>
125+
</module>
126+
<module name="TypeName">
127+
<message key="name.invalidPattern"
128+
value="Type name ''{0}'' must match pattern ''{1}''."/>
129+
</module>
130+
<module name="MemberName">
131+
<property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9]*$"/>
132+
<message key="name.invalidPattern"
133+
value="Member name ''{0}'' must match pattern ''{1}''."/>
134+
</module>
135+
<module name="ParameterName">
136+
<property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
137+
<message key="name.invalidPattern"
138+
value="Parameter name ''{0}'' must match pattern ''{1}''."/>
139+
</module>
140+
<module name="CatchParameterName">
141+
<property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
142+
<message key="name.invalidPattern"
143+
value="Catch parameter name ''{0}'' must match pattern ''{1}''."/>
144+
</module>
145+
<module name="LocalVariableName">
146+
<property name="tokens" value="VARIABLE_DEF"/>
147+
<property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
148+
<message key="name.invalidPattern"
149+
value="Local variable name ''{0}'' must match pattern ''{1}''."/>
150+
</module>
151+
<module name="ClassTypeParameterName">
152+
<property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
153+
<message key="name.invalidPattern"
154+
value="Class type name ''{0}'' must match pattern ''{1}''."/>
155+
</module>
156+
<module name="MethodTypeParameterName">
157+
<property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
158+
<message key="name.invalidPattern"
159+
value="Method type name ''{0}'' must match pattern ''{1}''."/>
160+
</module>
161+
<module name="InterfaceTypeParameterName">
162+
<property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
163+
<message key="name.invalidPattern"
164+
value="Interface type name ''{0}'' must match pattern ''{1}''."/>
165+
</module>
166+
<module name="NoFinalizer">
167+
<property name="id" value="finalizer"/>
168+
</module>
169+
<module name="GenericWhitespace">
170+
<message key="ws.followed"
171+
value="GenericWhitespace ''{0}'' is followed by whitespace."/>
172+
<message key="ws.preceded"
173+
value="GenericWhitespace ''{0}'' is preceded with whitespace."/>
174+
<message key="ws.illegalFollow"
175+
value="GenericWhitespace ''{0}'' should followed by whitespace."/>
176+
<message key="ws.notPreceded"
177+
value="GenericWhitespace ''{0}'' is not preceded with whitespace."/>
178+
</module>
179+
<module name="Indentation">
180+
<property name="basicOffset" value="4"/>
181+
<property name="braceAdjustment" value="0"/>
182+
<property name="caseIndent" value="4"/>
183+
<property name="throwsIndent" value="4"/>
184+
<property name="lineWrappingIndentation" value="8"/>
185+
<property name="arrayInitIndent" value="4"/>
186+
</module>
187+
<module name="AbbreviationAsWordInName">
188+
<property name="ignoreFinal" value="false"/>
189+
<property name="allowedAbbreviationLength" value="1"/>
190+
</module>
191+
<module name="OverloadMethodsDeclarationOrder"/>
192+
<module name="MethodParamPad"/>
193+
<module name="NoWhitespaceBefore">
194+
<property name="tokens" value="COMMA, SEMI, POST_INC, POST_DEC, DOT, ELLIPSIS, METHOD_REF"/>
195+
<property name="allowLineBreaks" value="true"/>
196+
</module>
197+
<module name="ParenPad"/>
198+
<module name="OperatorWrap">
199+
<property name="option" value="NL"/>
200+
<property name="tokens" value="BAND, BOR, BSR, BXOR, DIV, EQUAL, GE, GT, LAND, LE, LITERAL_INSTANCEOF, LOR, LT, MINUS, MOD, NOT_EQUAL, PLUS, QUESTION, SL, SR, STAR, METHOD_REF "/>
201+
</module>
202+
<module name="AnnotationLocation">
203+
<property name="id" value="AnnotationLocationMostCases"/>
204+
<property name="tokens" value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF"/>
205+
</module>
206+
<module name="AnnotationLocation">
207+
<property name="id" value="AnnotationLocationVariables"/>
208+
<property name="tokens" value="VARIABLE_DEF"/>
209+
<property name="allowSamelineMultipleAnnotations" value="true"/>
210+
</module>
211+
<module name="NonEmptyAtclauseDescription"/>
212+
<module name="JavadocTagContinuationIndentation"/>
213+
<module name="SummaryJavadoc">
214+
<property name="forbiddenSummaryFragments" value="^@return the *|^This method returns |^A [{]@code [a-zA-Z0-9]+[}]( is a )"/>
215+
</module>
216+
<module name="JavadocParagraph"/>
217+
<module name="AtclauseOrder">
218+
<property name="tagOrder" value="@param, @return, @throws, @deprecated"/>
219+
<property name="target" value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF, VARIABLE_DEF"/>
220+
</module>
221+
<module name="JavadocMethod">
222+
<property name="scope" value="public"/>
223+
<property name="allowMissingParamTags" value="false"/>
224+
<property name="allowMissingThrowsTags" value="false"/>
225+
<property name="allowMissingReturnTag" value="false"/>
226+
<property name="allowMissingJavadoc" value="false"/>
227+
<property name="allowedAnnotations" value="Override, Test"/>
228+
<property name="allowThrowsTagsForSubclasses" value="true"/>
229+
</module>
230+
<module name="MethodName">
231+
<property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9_]*$"/>
232+
<message key="name.invalidPattern"
233+
value="Method name ''{0}'' must match pattern ''{1}''."/>
234+
</module>
235+
<module name="SingleLineJavadoc">
236+
<property name="ignoreInlineTags" value="false"/>
237+
</module>
238+
<module name="EmptyCatchBlock">
239+
<property name="exceptionVariableName" value="ignored"/>
240+
</module>
241+
<module name="CommentsIndentation">
242+
<property name="id" value="CommentsIndentation"/>
243+
</module>
244+
<module name="AnnotationLocation">
245+
<property name="allowSamelineMultipleAnnotations" value="false" />
246+
<property name="allowSamelineSingleParameterlessAnnotation" value="false" />
247+
<property name="allowSamelineParameterizedAnnotation" value="false" />
248+
</module>
249+
</module>
250+
</module>

gradle.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
org.gradle.caching = true
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-bin.zip
44
zipStoreBase=GRADLE_USER_HOME
55
zipStorePath=wrapper/dists

settings.gradle

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
1-
rootProject.name = 'bot'
1+
rootProject.name = 'javacord-bot'
22

3+
// remove after upgrade to 5.0
4+
enableFeaturePreview 'IMPROVED_POM_SUPPORT'

0 commit comments

Comments
 (0)