Compare commits
60 commits
Author | SHA1 | Date | |
---|---|---|---|
aa5fad1989 | |||
559332a2b4 | |||
fc0963ad40 | |||
cfb8839359 | |||
a109d2ad93 | |||
dff81ff97a | |||
5926878f7a | |||
b4a63c6e31 | |||
5910bc2ae9 | |||
16620be21e | |||
a703238ea9 | |||
ee552bad83 | |||
6d8c740006 | |||
adbca3f40d | |||
d39c0183e6 | |||
27b7f1f2d1 | |||
c34ffb7f3d | |||
cc800e9aa8 | |||
58cd098d6c | |||
e39a67b6e4 | |||
0e988d62eb | |||
2a2de429b5 | |||
b76ffd1e14 | |||
b7cd90e67c | |||
b4a4b898e2 | |||
127c6e573c | |||
715cc9d1d8 | |||
6cb78a9e91 | |||
41e5467196 | |||
248d2c3362 | |||
7df5b39c6a | |||
fc11d3c749 | |||
eabca28d38 | |||
46b9a52215 | |||
8b9b40a419 | |||
bd5b55f1b7 | |||
e1b526a723 | |||
06c0a73924 | |||
07c23883c1 | |||
61d723b589 | |||
4ee818deab | |||
6b80d9a104 | |||
e8a12857b8 | |||
c4f143ae02 | |||
81212468fd | |||
7c07ad464b | |||
c1c5433472 | |||
3e564915ea | |||
4b00dd801a | |||
1cfa3a712f | |||
1e90d059cf | |||
b27e6e743c | |||
b725eb7b2f | |||
8fe93a3e9b | |||
d6a1919b5e | |||
0ee3b482c0 | |||
599190aae1 | |||
5beca281e6 | |||
9625c876bd | |||
3777e7b993 |
31 changed files with 540 additions and 300 deletions
31
.github/workflows/bld.yml
vendored
31
.github/workflows/bld.yml
vendored
|
@ -4,29 +4,36 @@ on: [ push, pull_request, workflow_dispatch ]
|
|||
|
||||
jobs:
|
||||
build-bld-project:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
java-version: [ 17, 20 ]
|
||||
java-version: [ 17, 21, 24 ]
|
||||
kotlin-version: [ 1.9.25, 2.0.21, 2.1.20 ]
|
||||
os: [ ubuntu-latest, windows-latest, macos-latest ]
|
||||
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
steps:
|
||||
- name: Checkout source repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Set up JDK ${{ matrix.java-version }}
|
||||
uses: actions/setup-java@v3
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
distribution: 'zulu'
|
||||
distribution: "zulu"
|
||||
java-version: ${{ matrix.java-version }}
|
||||
|
||||
- name: Grant execute permission for bld
|
||||
run: chmod +x bld
|
||||
|
||||
- name: Download the dependencies
|
||||
- name: Download dependencies [examples]
|
||||
working-directory: examples
|
||||
run: ./bld download
|
||||
|
||||
- name: Run tests with bld
|
||||
run: ./bld compile test
|
||||
- name: Compile and run [examples]
|
||||
working-directory: examples
|
||||
run: ./bld compile run
|
||||
|
||||
- name: Download dependencies
|
||||
run: ./bld download
|
||||
|
||||
- name: Run tests
|
||||
run: ./bld compile test
|
12
.github/workflows/pages.yml
vendored
12
.github/workflows/pages.yml
vendored
|
@ -30,14 +30,14 @@ jobs:
|
|||
|
||||
steps:
|
||||
- name: Checkout source repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Set up JDK 17
|
||||
uses: actions/setup-java@v3
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
distribution: 'zulu'
|
||||
distribution: "zulu"
|
||||
java-version: 17
|
||||
|
||||
- name: Build Javadocs
|
||||
|
@ -47,11 +47,11 @@ jobs:
|
|||
uses: actions/configure-pages@v3
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-pages-artifact@v1
|
||||
uses: actions/upload-pages-artifact@v3
|
||||
with:
|
||||
# Upload generated Javadocs repository
|
||||
path: 'build/javadoc/'
|
||||
path: "build/javadoc/"
|
||||
|
||||
- name: Deploy to GitHub Pages
|
||||
id: deployment
|
||||
uses: actions/deploy-pages@v1
|
||||
uses: actions/deploy-pages@v4
|
||||
|
|
6
.idea/bld.xml
generated
Normal file
6
.idea/bld.xml
generated
Normal file
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="BldConfiguration">
|
||||
<events />
|
||||
</component>
|
||||
</project>
|
4
.idea/copyright/Apache_License.xml
generated
4
.idea/copyright/Apache_License.xml
generated
|
@ -1,6 +1,6 @@
|
|||
<component name="CopyrightManager">
|
||||
<copyright>
|
||||
<option name="notice" value="Copyright 2023-Copyright &#36;today.yearamp;#36;today.year the original author or authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License." />
|
||||
<option name="notice" value="Copyright 2023-&#36;today.year the original author or authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License." />
|
||||
<option name="myName" value="Apache License" />
|
||||
</copyright>
|
||||
</component>
|
||||
</component>
|
13
.idea/icon.svg
generated
Normal file
13
.idea/icon.svg
generated
Normal file
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg width="100%" height="100%" viewBox="0 0 179 108" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
|
||||
<g transform="matrix(1,0,0,1,-210.511,-96.3382)">
|
||||
<g transform="matrix(1,0,0,1,-23.3386,-649.816)">
|
||||
<g transform="matrix(0.221288,0,0,0.24,73.9536,390.254)">
|
||||
<path d="M722.568,1482.92L722.568,1921.1L808.968,1921.1L808.968,1888.7C822.168,1907.9 846.168,1930.1 893.568,1930.1C933.168,1930.1 961.968,1917.5 985.368,1893.5C1012.97,1865.9 1027.37,1827.5 1027.37,1786.1C1027.37,1741.7 1011.17,1705.1 985.368,1680.5C961.968,1658.3 928.968,1644.5 892.368,1644.5C862.968,1644.5 830.568,1654.1 808.968,1683.5L808.968,1482.92L722.568,1482.92ZM871.368,1718.9C888.768,1718.9 903.768,1723.7 917.568,1736.9C930.168,1748.9 938.568,1766.3 938.568,1787.9C938.568,1807.7 930.168,1825.1 917.568,1837.1C904.368,1849.7 887.568,1855.7 872.568,1855.7C856.368,1855.7 837.168,1849.1 823.368,1835.9C813.168,1826.3 803.568,1810.1 803.568,1787.9C803.568,1765.1 812.568,1749.5 822.768,1738.7C836.568,1724.3 852.768,1718.9 871.368,1718.9Z" style="fill:rgb(35,146,255);fill-rule:nonzero;"/>
|
||||
<rect x="1083.77" y="1482.92" width="86.4" height="438.182" style="fill:rgb(250,144,82);fill-rule:nonzero;"/>
|
||||
<path d="M1531.37,1482.92L1444.97,1482.92L1444.97,1683.5C1423.37,1654.1 1390.97,1644.5 1361.57,1644.5C1324.97,1644.5 1291.97,1658.3 1268.57,1680.5C1242.77,1705.1 1226.57,1741.7 1226.57,1786.1C1226.57,1827.5 1240.97,1865.9 1268.57,1893.5C1291.97,1917.5 1320.77,1930.1 1360.37,1930.1C1407.77,1930.1 1431.77,1907.9 1444.97,1888.7L1444.97,1921.1L1531.37,1921.1L1531.37,1482.92ZM1382.57,1718.9C1401.17,1718.9 1417.37,1724.3 1431.17,1738.7C1441.37,1749.5 1450.37,1765.1 1450.37,1787.9C1450.37,1810.1 1440.77,1826.3 1430.57,1835.9C1416.77,1849.1 1397.57,1855.7 1381.37,1855.7C1366.37,1855.7 1349.57,1849.7 1336.37,1837.1C1323.77,1825.1 1315.37,1807.7 1315.37,1787.9C1315.37,1766.3 1323.77,1748.9 1336.37,1736.9C1350.17,1723.7 1365.17,1718.9 1382.57,1718.9Z" style="fill:rgb(35,146,255);fill-rule:nonzero;"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.4 KiB |
4
.idea/libraries/bld.xml
generated
4
.idea/libraries/bld.xml
generated
|
@ -2,12 +2,12 @@
|
|||
<library name="bld">
|
||||
<CLASSES>
|
||||
<root url="file://$PROJECT_DIR$/lib/bld" />
|
||||
<root url="jar://$USER_HOME$/.bld/dist/bld-1.9.0.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.bld/dist/bld-2.2.1.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES>
|
||||
<root url="file://$PROJECT_DIR$/lib/bld" />
|
||||
<root url="jar://$USER_HOME$/.bld/dist/bld-1.9.0-sources.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.bld/dist/bld-2.2.1-sources.jar!/" />
|
||||
</SOURCES>
|
||||
<excluded>
|
||||
<root url="jar://$PROJECT_DIR$/lib/bld/bld-wrapper.jar!/" />
|
||||
|
|
4
.idea/libraries/compile.xml
generated
4
.idea/libraries/compile.xml
generated
|
@ -7,7 +7,7 @@
|
|||
<SOURCES>
|
||||
<root url="file://$PROJECT_DIR$/lib/compile" />
|
||||
</SOURCES>
|
||||
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="false" />
|
||||
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="false" type="SOURCES" />
|
||||
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="true" />
|
||||
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="true" type="SOURCES" />
|
||||
</library>
|
||||
</component>
|
4
.idea/libraries/runtime.xml
generated
4
.idea/libraries/runtime.xml
generated
|
@ -8,7 +8,7 @@
|
|||
<SOURCES>
|
||||
<root url="file://$PROJECT_DIR$/lib/runtime" />
|
||||
</SOURCES>
|
||||
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="false" />
|
||||
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="false" type="SOURCES" />
|
||||
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="true" />
|
||||
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="true" type="SOURCES" />
|
||||
</library>
|
||||
</component>
|
4
.idea/libraries/test.xml
generated
4
.idea/libraries/test.xml
generated
|
@ -8,7 +8,7 @@
|
|||
<SOURCES>
|
||||
<root url="file://$PROJECT_DIR$/lib/test" />
|
||||
</SOURCES>
|
||||
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="false" />
|
||||
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="false" type="SOURCES" />
|
||||
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="true" />
|
||||
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="true" type="SOURCES" />
|
||||
</library>
|
||||
</component>
|
2
.vscode/settings.json
vendored
2
.vscode/settings.json
vendored
|
@ -9,7 +9,7 @@
|
|||
],
|
||||
"java.configuration.updateBuildConfiguration": "automatic",
|
||||
"java.project.referencedLibraries": [
|
||||
"${HOME}/.bld/dist/bld-1.9.0.jar",
|
||||
"${HOME}/.bld/dist/bld-2.2.1.jar",
|
||||
"lib/**/*.jar"
|
||||
]
|
||||
}
|
||||
|
|
16
README.md
16
README.md
|
@ -3,12 +3,20 @@
|
|||
|
||||
[](https://opensource.org/licenses/Apache-2.0)
|
||||
[](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html)
|
||||
[](https://rife2.com/bld)
|
||||
[](https://rife2.com/bld)
|
||||
[](https://repo.rife2.com/#/releases/com/uwyn/rife2/bld-generated-version)
|
||||
[](https://repo.rife2.com/#/snapshots/com/uwyn/rife2/bld-generated-version)
|
||||
[](https://github.com/rife2/bld-generated-version/actions/workflows/bld.yml)
|
||||
|
||||
To install, please refer to the [extensions documentation](https://github.com/rife2/bld/wiki/Extensions).
|
||||
To install the latest version, add the following to the `lib/bld/bld-wrapper.properties` file:
|
||||
|
||||
```properties
|
||||
bld.extension-generated-version=com.uwyn.rife2:bld-generated-version
|
||||
```
|
||||
|
||||
For more information, please refer to the [extensions](https://github.com/rife2/bld/wiki/Extensions) documentation.
|
||||
|
||||
## Generate Version Data Class
|
||||
|
||||
To automatically create a generated version class using the default template in your project on compile, add the following to your build file:
|
||||
```java
|
||||
|
@ -66,12 +74,12 @@ public void genver() throws Exception {
|
|||
.projectName("My App")
|
||||
.packageName("com.example.myapp")
|
||||
.className("MyAppVersion")
|
||||
.classTemplate(new File(workDirectory, "myversion.txt"))
|
||||
.classTemplate("my_app_version.txt")
|
||||
.execute();
|
||||
}
|
||||
```
|
||||
```java
|
||||
// myversion.txt
|
||||
// my_app_version.txt
|
||||
|
||||
package {{v packageName/}};
|
||||
|
||||
|
|
|
@ -7,9 +7,9 @@
|
|||
<!-- BEST PRACTICES -->
|
||||
<rule ref="category/java/bestpractices.xml">
|
||||
<exclude name="AvoidPrintStackTrace"/>
|
||||
<exclude name="JUnit4TestShouldUseTestAnnotation"/>
|
||||
<exclude name="JUnitTestContainsTooManyAsserts"/>
|
||||
<exclude name="GuardLogStatement"/>
|
||||
<exclude name="UnitTestContainsTooManyAsserts"/>
|
||||
<exclude name="UnitTestShouldUseTestAnnotation"/>
|
||||
</rule>
|
||||
|
||||
<rule ref="category/java/bestpractices.xml/MissingOverride">
|
||||
|
@ -24,8 +24,8 @@
|
|||
<rule ref="category/java/codestyle.xml">
|
||||
<exclude name="AtLeastOneConstructor"/>
|
||||
<exclude name="ClassNamingConventions"/>
|
||||
<exclude name="ConfusingTernary"/>
|
||||
<exclude name="CommentDefaultAccessModifier"/>
|
||||
<exclude name="ConfusingTernary"/>
|
||||
<exclude name="FieldNamingConventions"/>
|
||||
<exclude name="LocalVariableCouldBeFinal"/>
|
||||
<exclude name="LongVariable"/>
|
||||
|
@ -35,8 +35,9 @@
|
|||
<exclude name="ShortClassName"/>
|
||||
<exclude name="ShortMethodName"/>
|
||||
<exclude name="ShortVariable"/>
|
||||
<exclude name="UselessParentheses"/>
|
||||
<exclude name="UseExplicitTypes"/>
|
||||
<exclude name="UseUnderscoresInNumericLiterals"/>
|
||||
<exclude name="UselessParentheses"/>
|
||||
</rule>
|
||||
|
||||
<rule ref="category/java/codestyle.xml/UnnecessaryImport">
|
||||
|
@ -52,8 +53,6 @@
|
|||
<exclude name="AvoidUncheckedExceptionsInSignatures"/>
|
||||
<exclude name="CognitiveComplexity"/>
|
||||
<exclude name="CyclomaticComplexity"/>
|
||||
<exclude name="ExcessiveClassLength"/>
|
||||
<exclude name="ExcessiveMethodLength"/>
|
||||
<exclude name="ExcessiveParameterList"/>
|
||||
<exclude name="ExcessivePublicCount"/>
|
||||
<exclude name="GodClass"/>
|
||||
|
@ -107,4 +106,4 @@
|
|||
<!-- SECURITY -->
|
||||
<rule ref="category/java/security.xml">
|
||||
</rule>
|
||||
</ruleset>
|
||||
</ruleset>
|
||||
|
|
4
examples/.idea/libraries/bld.xml
generated
4
examples/.idea/libraries/bld.xml
generated
|
@ -2,12 +2,12 @@
|
|||
<library name="bld">
|
||||
<CLASSES>
|
||||
<root url="file://$PROJECT_DIR$/lib/bld" />
|
||||
<root url="jar://$USER_HOME$/.bld/dist/bld-1.9.0.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.bld/dist/bld-2.2.1.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES>
|
||||
<root url="file://$PROJECT_DIR$/lib/bld" />
|
||||
<root url="jar://$USER_HOME$/.bld/dist/bld-1.9.0-sources.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.bld/dist/bld-2.2.1-sources.jar!/" />
|
||||
</SOURCES>
|
||||
<excluded>
|
||||
<root url="jar://$PROJECT_DIR$/lib/bld/bld-wrapper.jar!/" />
|
||||
|
|
4
examples/.idea/libraries/compile.xml
generated
4
examples/.idea/libraries/compile.xml
generated
|
@ -7,7 +7,7 @@
|
|||
<SOURCES>
|
||||
<root url="file://$PROJECT_DIR$/lib/compile" />
|
||||
</SOURCES>
|
||||
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="false" />
|
||||
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="false" type="SOURCES" />
|
||||
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="true" />
|
||||
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="true" type="SOURCES" />
|
||||
</library>
|
||||
</component>
|
4
examples/.idea/libraries/runtime.xml
generated
4
examples/.idea/libraries/runtime.xml
generated
|
@ -8,7 +8,7 @@
|
|||
<SOURCES>
|
||||
<root url="file://$PROJECT_DIR$/lib/runtime" />
|
||||
</SOURCES>
|
||||
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="false" />
|
||||
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="false" type="SOURCES" />
|
||||
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="true" />
|
||||
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="true" type="SOURCES" />
|
||||
</library>
|
||||
</component>
|
4
examples/.idea/libraries/test.xml
generated
4
examples/.idea/libraries/test.xml
generated
|
@ -8,7 +8,7 @@
|
|||
<SOURCES>
|
||||
<root url="file://$PROJECT_DIR$/lib/test" />
|
||||
</SOURCES>
|
||||
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="false" />
|
||||
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="false" type="SOURCES" />
|
||||
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="true" />
|
||||
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="true" type="SOURCES" />
|
||||
</library>
|
||||
</component>
|
2
examples/.vscode/settings.json
vendored
2
examples/.vscode/settings.json
vendored
|
@ -9,7 +9,7 @@
|
|||
],
|
||||
"java.configuration.updateBuildConfiguration": "automatic",
|
||||
"java.project.referencedLibraries": [
|
||||
"${HOME}/.bld/dist/bld-1.9.0.jar",
|
||||
"${HOME}/.bld/dist/bld-2.2.1.jar",
|
||||
"lib/**/*.jar"
|
||||
]
|
||||
}
|
||||
|
|
Binary file not shown.
|
@ -1,6 +1,6 @@
|
|||
bld.downloadExtensionJavadoc=false
|
||||
bld.downloadExtensionSources=true
|
||||
bld.extensions=com.uwyn.rife2:bld-generated-version:0.9.5
|
||||
bld.repositories=MAVEN_LOCAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES
|
||||
bld.downloadLocation=
|
||||
bld.version=1.9.0
|
||||
bld.extension-gv=com.uwyn.rife2:bld-generated-version:1.0.1
|
||||
bld.repositories=MAVEN_LOCAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES
|
||||
bld.version=2.2.1
|
||||
|
|
30
examples/my_app_version.txt
Normal file
30
examples/my_app_version.txt
Normal file
|
@ -0,0 +1,30 @@
|
|||
package {{v packageName/}};
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
public final class {{v className/}} implements Comparable<{{v className/}}> {
|
||||
public static final String PROJECT = "{{v project/}}";
|
||||
public static final Date BUILD_DATE = new Date({{v epoch/}}L);
|
||||
public static final int MAJOR = {{v major/}};
|
||||
public static final int MINOR = {{v minor/}};
|
||||
public static final int REVISION = {{v revision/}};
|
||||
public static final String QUALIFIER = "{{v qualifier/}}";
|
||||
public static final String VERSION = "{{v version/}}";
|
||||
|
||||
private {{v className/}}() {
|
||||
// no-op
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compareTo({{v className/}} other) {
|
||||
if (MAJOR != other.MAJOR) {
|
||||
return Integer.compare(MAJOR, other.MAJOR);
|
||||
} else if (MINOR != other.MINOR) {
|
||||
return Integer.compare(MINOR, other.MINOR);
|
||||
} else if (REVISION != other.REVISION) {
|
||||
return Integer.compare(REVISION, other.REVISION);
|
||||
} else {
|
||||
return QUALIFIER.compareTo(other.QUALIFIER);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -4,7 +4,6 @@ import rife.bld.BuildCommand;
|
|||
import rife.bld.Project;
|
||||
import rife.bld.extension.GeneratedVersionOperation;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
|
||||
import static rife.bld.dependencies.Repository.MAVEN_CENTRAL;
|
||||
|
@ -13,10 +12,6 @@ import static rife.bld.dependencies.Scope.test;
|
|||
|
||||
/**
|
||||
* Example build.
|
||||
*
|
||||
* <ul style="list-style-type:none">
|
||||
* <li>./bld compile run</li>
|
||||
* </ul>
|
||||
*/
|
||||
public class SampleBuild extends Project {
|
||||
public SampleBuild() {
|
||||
|
@ -25,13 +20,15 @@ public class SampleBuild extends Project {
|
|||
mainClass = "com.example.SampleMain";
|
||||
version = version(1, 0, 1, "rc1");
|
||||
|
||||
javaRelease = 17;
|
||||
|
||||
autoDownloadPurge = true;
|
||||
downloadSources = true;
|
||||
|
||||
repositories = List.of(MAVEN_CENTRAL, RIFE2_RELEASES);
|
||||
scope(test)
|
||||
.include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 10, 2)))
|
||||
.include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 10, 2)));
|
||||
.include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 12, 1)))
|
||||
.include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 12, 1)));
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
@ -49,7 +46,8 @@ public class SampleBuild extends Project {
|
|||
new GeneratedVersionOperation()
|
||||
.fromProject(this)
|
||||
// .projectName("My App")
|
||||
// .classTemplate(new File(workDirectory, "myversion.txt"))
|
||||
// .classTemplate("my_app_version.txt")
|
||||
// .classTemplate("version.txt")
|
||||
.execute();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/*
|
||||
/**
|
||||
* This file is automatically generated.
|
||||
* Do not modify! -- ALL CHANGES WILL BE ERASED!
|
||||
*/
|
||||
|
@ -12,7 +12,7 @@ import java.util.Date;
|
|||
*/
|
||||
public final class GeneratedVersion {
|
||||
public static final String PROJECT = "Sample";
|
||||
public static final Date BUILD_DATE = new Date(1708978279960L);
|
||||
public static final Date BUILD_DATE = new Date(1736843939053L);
|
||||
public static final int MAJOR = 1;
|
||||
public static final int MINOR = 0;
|
||||
public static final int REVISION = 1;
|
||||
|
|
Binary file not shown.
|
@ -1,7 +1,6 @@
|
|||
bld.downloadExtensionJavadoc=false
|
||||
bld.downloadExtensionSources=true
|
||||
bld.extension-pmd=com.uwyn.rife2:bld-pmd:0.9.7
|
||||
bld.extension-jacoco=com.uwyn.rife2:bld-jacoco-report:0.9.3
|
||||
bld.repositories=MAVEN_CENTRAL,MAVEN_LOCAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES
|
||||
bld.downloadLocation=
|
||||
bld.version=1.9.0
|
||||
bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.2.2
|
||||
bld.repositories=MAVEN_CENTRAL,MAVEN_LOCAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES
|
||||
bld.version=2.2.1
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2023-2024 the original author or authors.
|
||||
* Copyright 2023-2025 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -22,11 +22,9 @@ import rife.bld.publish.PublishDeveloper;
|
|||
import rife.bld.publish.PublishLicense;
|
||||
import rife.bld.publish.PublishScm;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
import static rife.bld.dependencies.Repository.MAVEN_CENTRAL;
|
||||
import static rife.bld.dependencies.Repository.RIFE2_RELEASES;
|
||||
import static rife.bld.dependencies.Repository.*;
|
||||
import static rife.bld.dependencies.Scope.compile;
|
||||
import static rife.bld.dependencies.Scope.test;
|
||||
import static rife.bld.operations.JavadocOptions.DocLinkOption.NO_MISSING;
|
||||
|
@ -36,19 +34,21 @@ public class GeneratedVersionOperationBuild extends Project {
|
|||
public GeneratedVersionOperationBuild() {
|
||||
pkg = "rife.bld.extension";
|
||||
name = "GeneratedVersionOperation";
|
||||
version = version(0, 9, 5);
|
||||
version = version(1, 0, 1);
|
||||
|
||||
javaRelease = 17;
|
||||
|
||||
downloadSources = true;
|
||||
autoDownloadPurge = true;
|
||||
repositories = List.of(MAVEN_CENTRAL, RIFE2_RELEASES);
|
||||
|
||||
repositories = List.of(MAVEN_CENTRAL, RIFE2_RELEASES, RIFE2_SNAPSHOTS);
|
||||
|
||||
scope(compile)
|
||||
.include(dependency("com.uwyn.rife2", "bld", version(1, 9, 0)));
|
||||
.include(dependency("com.uwyn.rife2", "bld", version(2, 2, 1)));
|
||||
scope(test)
|
||||
.include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 10, 2)))
|
||||
.include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 10, 2)))
|
||||
.include(dependency("org.assertj", "assertj-core", version(3, 25, 3)));
|
||||
.include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 12, 1)))
|
||||
.include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 12, 1)))
|
||||
.include(dependency("org.assertj", "assertj-core", version(3, 27, 3)));
|
||||
|
||||
precompileOperation()
|
||||
.templateTypes(TXT);
|
||||
|
@ -63,28 +63,26 @@ public class GeneratedVersionOperationBuild extends Project {
|
|||
|
||||
publishOperation()
|
||||
.repositories(version.isSnapshot() ? repository("rife2-snapshot") : repository("rife2"))
|
||||
.repository(repository("github"))
|
||||
.info()
|
||||
.groupId("com.uwyn.rife2")
|
||||
.artifactId("bld-generated-version")
|
||||
.description("bld Extension to Generate Project Version Data")
|
||||
.url("https://github.com/rife2/generated-version")
|
||||
.developer(
|
||||
new PublishDeveloper()
|
||||
.id("ethauvin")
|
||||
.name("Erik C. Thauvin")
|
||||
.email("erik@thauvin.net")
|
||||
.url("https://erik.thauvin.net/")
|
||||
.developer(new PublishDeveloper()
|
||||
.id("ethauvin")
|
||||
.name("Erik C. Thauvin")
|
||||
.email("erik@thauvin.net")
|
||||
.url("https://erik.thauvin.net/")
|
||||
)
|
||||
.license(
|
||||
new PublishLicense()
|
||||
.name("The Apache License, Version 2.0")
|
||||
.url("http://www.apache.org/licenses/LICENSE-2.0.txt")
|
||||
.license(new PublishLicense()
|
||||
.name("The Apache License, Version 2.0")
|
||||
.url("https://www.apache.org/licenses/LICENSE-2.0.txt")
|
||||
)
|
||||
.scm(
|
||||
new PublishScm()
|
||||
.connection("scm:git:https://github.com/rife2/generated-version.git")
|
||||
.developerConnection("scm:git:git@github.com:rife2/generated-version.git")
|
||||
.url("https://github.com/rife2/generated-version")
|
||||
.scm(new PublishScm()
|
||||
.connection("scm:git:https://github.com/rife2/generated-version.git")
|
||||
.developerConnection("scm:git:git@github.com:rife2/generated-version.git")
|
||||
.url("https://github.com/rife2/generated-version")
|
||||
)
|
||||
.signKey(property("sign.key"))
|
||||
.signPassphrase(property("sign.passphrase"));
|
||||
|
@ -94,15 +92,8 @@ public class GeneratedVersionOperationBuild extends Project {
|
|||
new GeneratedVersionOperationBuild().start(args);
|
||||
}
|
||||
|
||||
@BuildCommand(summary = "Generates JaCoCo Reports")
|
||||
public void jacoco() throws IOException {
|
||||
new JacocoReportOperation()
|
||||
.fromProject(this)
|
||||
.execute();
|
||||
}
|
||||
|
||||
@BuildCommand(summary = "Runs PMD analysis")
|
||||
public void pmd() {
|
||||
public void pmd() throws Exception {
|
||||
new PmdOperation()
|
||||
.fromProject(this)
|
||||
.failOnViolation(true)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2023-2024 the original author or authors.
|
||||
* Copyright 2023-2025 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -17,8 +17,16 @@
|
|||
package rife.bld.extension;
|
||||
|
||||
import rife.bld.BaseProject;
|
||||
import rife.resources.ResourceFinderClasspath;
|
||||
import rife.resources.ResourceFinderDirectories;
|
||||
import rife.resources.ResourceFinderGroup;
|
||||
import rife.template.Template;
|
||||
import rife.template.TemplateFactory;
|
||||
import rife.tools.FileUtils;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Path;
|
||||
|
||||
/**
|
||||
* GeneratedVersion data class.
|
||||
|
@ -26,16 +34,93 @@ import java.io.File;
|
|||
* @author <a href="https://erik.thauvin.net/">Erik C. Thauvin</a>
|
||||
* @since 1.0
|
||||
*/
|
||||
@SuppressWarnings("PMD.DataClass")
|
||||
public class GeneratedVersion {
|
||||
private File classFile;
|
||||
private String className;
|
||||
private File directory;
|
||||
private String extension = ".java";
|
||||
private String packageName;
|
||||
private BaseProject project;
|
||||
private String projectName;
|
||||
private File template;
|
||||
private static final String CLASSNAME = "className";
|
||||
private static final String EPOCH = "epoch";
|
||||
private static final String MAJOR = "major";
|
||||
private static final String MINOR = "minor";
|
||||
private static final String PACKAGE_NAME = "packageName";
|
||||
private static final String PROJECT = "project";
|
||||
private static final String QUALIFIER = "qualifier";
|
||||
private static final String REVISION = "revision";
|
||||
private static final String VERSION = "version";
|
||||
private File classFile_;
|
||||
private String className_ = "GeneratedVersion";
|
||||
private File directory_;
|
||||
private String extension_ = ".java";
|
||||
private String packageName_;
|
||||
private String projectName_;
|
||||
private BaseProject project_;
|
||||
private File template_;
|
||||
|
||||
/**
|
||||
* Builds the template based on the {@link GeneratedVersion} data.
|
||||
*
|
||||
* @return the template
|
||||
*/
|
||||
public Template buildTemplate() {
|
||||
Template template;
|
||||
var version = project_.version();
|
||||
TemplateFactory.TXT.resetClassLoader();
|
||||
if (template_ == null) {
|
||||
var group = new ResourceFinderGroup().add(ResourceFinderClasspath.instance());
|
||||
template = TemplateFactory.TXT.setResourceFinder(group).get("default_generated_version");
|
||||
} else {
|
||||
File parent;
|
||||
if (template_.getParentFile() != null) {
|
||||
parent = template_.getParentFile();
|
||||
} else {
|
||||
parent = new File(template_.getAbsolutePath()).getParentFile();
|
||||
}
|
||||
var group = new ResourceFinderGroup().add(new ResourceFinderDirectories(parent));
|
||||
template = TemplateFactory.TXT.setResourceFinder(group).get(template_.getName());
|
||||
}
|
||||
|
||||
if (packageName_ == null) {
|
||||
packageName_ = project_.pkg();
|
||||
}
|
||||
|
||||
if (template.hasValueId(PACKAGE_NAME)) {
|
||||
template.setValue(PACKAGE_NAME, packageName_);
|
||||
}
|
||||
|
||||
if (template.hasValueId(CLASSNAME)) {
|
||||
template.setValue(CLASSNAME, className_);
|
||||
}
|
||||
|
||||
if (template.hasValueId(PROJECT)) {
|
||||
if (projectName_ == null) {
|
||||
projectName_ = project_.name();
|
||||
}
|
||||
template.setValue(PROJECT, projectName_);
|
||||
}
|
||||
|
||||
if (template.hasValueId(EPOCH)) {
|
||||
template.setValue(EPOCH, System.currentTimeMillis());
|
||||
}
|
||||
|
||||
if (template.hasValueId(VERSION)) {
|
||||
template.setValue(VERSION, version.toString());
|
||||
}
|
||||
|
||||
if (template.hasValueId(MAJOR)) {
|
||||
template.setValue(MAJOR, version.majorInt());
|
||||
}
|
||||
|
||||
if (template.hasValueId(MINOR)) {
|
||||
template.setValue(MINOR, version.minorInt());
|
||||
}
|
||||
|
||||
if (template.hasValueId(REVISION)) {
|
||||
template.setValue(REVISION, version.revisionInt());
|
||||
}
|
||||
|
||||
if (template.hasValueId(QUALIFIER)) {
|
||||
template.setValue(QUALIFIER, version.qualifier());
|
||||
}
|
||||
|
||||
return template;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the class file.
|
||||
|
@ -43,7 +128,7 @@ public class GeneratedVersion {
|
|||
* @return the class file
|
||||
*/
|
||||
public File getClassFile() {
|
||||
return classFile;
|
||||
return classFile_;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -52,7 +137,7 @@ public class GeneratedVersion {
|
|||
* @return the class name
|
||||
*/
|
||||
public String getClassName() {
|
||||
return className;
|
||||
return className_;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -61,7 +146,7 @@ public class GeneratedVersion {
|
|||
* @return the destination directory
|
||||
*/
|
||||
public File getDirectory() {
|
||||
return directory;
|
||||
return directory_;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -70,7 +155,7 @@ public class GeneratedVersion {
|
|||
* @return the file extension
|
||||
*/
|
||||
public String getExtension() {
|
||||
return extension;
|
||||
return extension_;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -79,7 +164,7 @@ public class GeneratedVersion {
|
|||
* @return the package name
|
||||
*/
|
||||
public String getPackageName() {
|
||||
return packageName;
|
||||
return packageName_;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -88,7 +173,7 @@ public class GeneratedVersion {
|
|||
* @return the project
|
||||
*/
|
||||
public BaseProject getProject() {
|
||||
return project;
|
||||
return project_;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -97,7 +182,7 @@ public class GeneratedVersion {
|
|||
* @return the project name
|
||||
*/
|
||||
public String getProjectName() {
|
||||
return projectName;
|
||||
return projectName_;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -106,16 +191,7 @@ public class GeneratedVersion {
|
|||
* @return the template
|
||||
*/
|
||||
public File getTemplate() {
|
||||
return template;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the class file.
|
||||
*
|
||||
* @param classFile the class file
|
||||
*/
|
||||
public void setClassFile(File classFile) {
|
||||
this.classFile = classFile;
|
||||
return template_;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -124,7 +200,7 @@ public class GeneratedVersion {
|
|||
* @param className the class name
|
||||
*/
|
||||
public void setClassName(String className) {
|
||||
this.className = className;
|
||||
this.className_ = className;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -133,7 +209,7 @@ public class GeneratedVersion {
|
|||
* @param directory the destination directory
|
||||
*/
|
||||
public void setDirectory(File directory) {
|
||||
this.directory = directory;
|
||||
this.directory_ = directory;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -142,7 +218,7 @@ public class GeneratedVersion {
|
|||
* @param extension the file extension
|
||||
*/
|
||||
public void setExtension(String extension) {
|
||||
this.extension = extension;
|
||||
this.extension_ = extension;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -151,7 +227,7 @@ public class GeneratedVersion {
|
|||
* @param packageName the package name
|
||||
*/
|
||||
public void setPackageName(String packageName) {
|
||||
this.packageName = packageName;
|
||||
this.packageName_ = packageName;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -160,7 +236,7 @@ public class GeneratedVersion {
|
|||
* @param project the project
|
||||
*/
|
||||
public void setProject(BaseProject project) {
|
||||
this.project = project;
|
||||
this.project_ = project;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -169,7 +245,7 @@ public class GeneratedVersion {
|
|||
* @param projectName the project name
|
||||
*/
|
||||
public void setProjectName(String projectName) {
|
||||
this.projectName = projectName;
|
||||
this.projectName_ = projectName;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -178,6 +254,31 @@ public class GeneratedVersion {
|
|||
* @param template the template
|
||||
*/
|
||||
public void setTemplate(File template) {
|
||||
this.template = template;
|
||||
this.template_ = template;
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes the project version class in the given directory.
|
||||
*/
|
||||
public void writeTemplate(Template template) throws IOException {
|
||||
if (packageName_ != null) {
|
||||
classFile_ = Path.of(directory_.getAbsolutePath(), packageName_.replace(".", File.separator),
|
||||
className_ + extension_).toFile();
|
||||
} else {
|
||||
classFile_ = new File(directory_, className_ + ".java");
|
||||
}
|
||||
|
||||
if (!classFile_.getParentFile().exists()) {
|
||||
var dirs = classFile_.getParentFile().mkdirs();
|
||||
if (!dirs && !classFile_.getParentFile().exists()) {
|
||||
throw new IOException("Could not create project package directories: " + classFile_.getParent());
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
FileUtils.writeString(template.getContent(), classFile_);
|
||||
} catch (IOException e) {
|
||||
throw new IOException("Unable to write the version class file: " + e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2023-2024 the original author or authors.
|
||||
* Copyright 2023-2025 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -19,16 +19,10 @@ package rife.bld.extension;
|
|||
|
||||
import rife.bld.BaseProject;
|
||||
import rife.bld.operations.AbstractOperation;
|
||||
import rife.resources.ResourceFinderDirectories;
|
||||
import rife.template.Template;
|
||||
import rife.template.TemplateConfig;
|
||||
import rife.template.TemplateFactory;
|
||||
import rife.tools.FileUtils;
|
||||
import rife.bld.operations.exceptions.ExitStatusException;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Objects;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
|
@ -39,119 +33,8 @@ import java.util.logging.Logger;
|
|||
* @since 1.0
|
||||
*/
|
||||
public class GeneratedVersionOperation extends AbstractOperation<GeneratedVersionOperation> {
|
||||
private static final String CLASSNAME = "className";
|
||||
private static final String EPOCH = "epoch";
|
||||
private static final Logger LOGGER = Logger.getLogger(GeneratedVersionOperation.class.getName());
|
||||
private static final String MAJOR = "major";
|
||||
private static final String MINOR = "minor";
|
||||
private static final String PACKAGE_NAME = "packageName";
|
||||
private static final String PROJECT = "project";
|
||||
private static final String QUALIFIER = "qualifier";
|
||||
private static final String REVISION = "revision";
|
||||
private static final String VERSION = "version";
|
||||
private final GeneratedVersion generatedVersion = new GeneratedVersion();
|
||||
|
||||
/**
|
||||
* Builds the template based on the {@link GeneratedVersion} data.
|
||||
*
|
||||
* @param gv the generated version
|
||||
* @return the template
|
||||
*/
|
||||
public static Template buildTemplate(GeneratedVersion gv) {
|
||||
Template template;
|
||||
var version = gv.getProject().version();
|
||||
if (gv.getTemplate() == null) {
|
||||
template = TemplateFactory.TXT.get("version.txt");
|
||||
} else {
|
||||
var files = new ResourceFinderDirectories(gv.getTemplate().getParentFile());
|
||||
template = new TemplateFactory(TemplateConfig.TXT, "txtFiles", TemplateFactory.TXT)
|
||||
.setResourceFinder(files).get(gv.getTemplate().getName());
|
||||
}
|
||||
|
||||
if (gv.getPackageName() == null) {
|
||||
gv.setPackageName(gv.getProject().pkg());
|
||||
}
|
||||
|
||||
if (template.hasValueId(PACKAGE_NAME)) {
|
||||
template.setValue(PACKAGE_NAME, gv.getPackageName());
|
||||
}
|
||||
|
||||
gv.setClassName(Objects.requireNonNullElse(gv.getClassName(), "GeneratedVersion"));
|
||||
if (template.hasValueId(CLASSNAME)) {
|
||||
template.setValue(CLASSNAME, gv.getClassName());
|
||||
}
|
||||
|
||||
if (template.hasValueId(PROJECT)) {
|
||||
if (gv.getProjectName() == null) {
|
||||
gv.setProjectName(gv.getProject().name());
|
||||
}
|
||||
template.setValue(PROJECT, gv.getProjectName());
|
||||
}
|
||||
|
||||
if (template.hasValueId(EPOCH)) {
|
||||
template.setValue(EPOCH, System.currentTimeMillis());
|
||||
}
|
||||
|
||||
if (template.hasValueId(VERSION)) {
|
||||
template.setValue(VERSION, version.toString());
|
||||
}
|
||||
|
||||
if (template.hasValueId(MAJOR)) {
|
||||
template.setValue(MAJOR, version.majorInt());
|
||||
}
|
||||
|
||||
if (template.hasValueId(MINOR)) {
|
||||
template.setValue(MINOR, version.minorInt());
|
||||
}
|
||||
|
||||
if (template.hasValueId(REVISION)) {
|
||||
template.setValue(REVISION, version.revisionInt());
|
||||
}
|
||||
|
||||
if (template.hasValueId(QUALIFIER)) {
|
||||
template.setValue(QUALIFIER, version.qualifier());
|
||||
}
|
||||
|
||||
return template;
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes the project version class in the given directory.
|
||||
*
|
||||
* @param template the template
|
||||
* @param gv the generated version
|
||||
*/
|
||||
public static void writeTemplate(Template template, GeneratedVersion gv) {
|
||||
if (gv.getPackageName() != null) {
|
||||
gv.setClassFile(Path.of(gv.getDirectory().getAbsolutePath(),
|
||||
gv.getPackageName().replace(".", File.separator), gv.getClassName()
|
||||
+ gv.getExtension()).toFile());
|
||||
} else {
|
||||
gv.setClassFile(Path.of(gv.getDirectory().getAbsolutePath(), gv.getClassName() + ".java").toFile());
|
||||
}
|
||||
|
||||
if (!gv.getClassFile().getParentFile().exists()) {
|
||||
var mkdirs = gv.getClassFile().getParentFile().mkdirs();
|
||||
if (!mkdirs && !gv.getClassFile().getParentFile().exists() && LOGGER.isLoggable(Level.SEVERE)) {
|
||||
LOGGER.log(Level.SEVERE, "Could not create project package directories: {0}",
|
||||
gv.getClassFile().getParent());
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
var updated = gv.getClassFile().exists();
|
||||
FileUtils.writeString(template.getContent(), gv.getClassFile());
|
||||
if (LOGGER.isLoggable(Level.INFO)) {
|
||||
LOGGER.log(Level.INFO, "Generated version ({0}) class has been {1}: {2}",
|
||||
new String[]{gv.getProject().version().toString(), updated ? "updated" : "created",
|
||||
gv.getClassFile().toString()});
|
||||
}
|
||||
} catch (IOException e) {
|
||||
if (LOGGER.isLoggable(Level.SEVERE)) {
|
||||
LOGGER.log(Level.SEVERE, "Unable to write the version class file.", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
private final GeneratedVersion generatedVersion_ = new GeneratedVersion();
|
||||
|
||||
/**
|
||||
* Sets the class name.
|
||||
|
@ -160,7 +43,7 @@ public class GeneratedVersionOperation extends AbstractOperation<GeneratedVersio
|
|||
* @return this operation instance
|
||||
*/
|
||||
public GeneratedVersionOperation className(String className) {
|
||||
generatedVersion.setClassName(className);
|
||||
generatedVersion_.setClassName(className);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
@ -171,10 +54,30 @@ public class GeneratedVersionOperation extends AbstractOperation<GeneratedVersio
|
|||
* @return this operation instance
|
||||
*/
|
||||
public GeneratedVersionOperation classTemplate(File template) {
|
||||
generatedVersion.setTemplate(template);
|
||||
generatedVersion_.setTemplate(template);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the class template path.
|
||||
*
|
||||
* @param template the template path
|
||||
* @return this operation instance
|
||||
*/
|
||||
public GeneratedVersionOperation classTemplate(String template) {
|
||||
return classTemplate(new File(template));
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the class template path.
|
||||
*
|
||||
* @param template the template path
|
||||
* @return this operation instance
|
||||
*/
|
||||
public GeneratedVersionOperation classTemplate(Path template) {
|
||||
return classTemplate(template.toFile());
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the destination directory.
|
||||
*
|
||||
|
@ -182,21 +85,57 @@ public class GeneratedVersionOperation extends AbstractOperation<GeneratedVersio
|
|||
* @return this operation instance
|
||||
*/
|
||||
public GeneratedVersionOperation directory(File directory) {
|
||||
generatedVersion.setDirectory(directory);
|
||||
generatedVersion_.setDirectory(directory);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the destination directory.
|
||||
*
|
||||
* @param directory the destination directory
|
||||
* @return this operation instance
|
||||
*/
|
||||
public GeneratedVersionOperation directory(String directory) {
|
||||
return directory(new File(directory));
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the destination directory.
|
||||
*
|
||||
* @param directory the destination directory
|
||||
* @return this operation instance
|
||||
*/
|
||||
public GeneratedVersionOperation directory(Path directory) {
|
||||
return directory(directory.toFile());
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a version data class for this project.
|
||||
*/
|
||||
@Override
|
||||
public void execute() {
|
||||
if (generatedVersion.getProject() == null && LOGGER.isLoggable(Level.SEVERE)) {
|
||||
LOGGER.severe("A project must be specified.");
|
||||
@SuppressWarnings("PMD.PreserveStackTrace")
|
||||
public void execute() throws Exception {
|
||||
if (generatedVersion_.getProject() == null) {
|
||||
if (LOGGER.isLoggable(Level.SEVERE) && !silent()) {
|
||||
LOGGER.severe("A project must be specified.");
|
||||
}
|
||||
throw new ExitStatusException(ExitStatusException.EXIT_FAILURE);
|
||||
} else {
|
||||
try {
|
||||
var template = generatedVersion_.buildTemplate();
|
||||
generatedVersion_.writeTemplate(template);
|
||||
if (LOGGER.isLoggable(Level.INFO) && !silent()) {
|
||||
LOGGER.log(Level.INFO, "Generated version ({0}) class saved to: file://{1}",
|
||||
new String[]{generatedVersion_.getProject().version().toString(),
|
||||
generatedVersion_.getClassFile().toURI().getPath()});
|
||||
}
|
||||
} catch (Exception e) {
|
||||
if (LOGGER.isLoggable(Level.SEVERE) && !silent()) {
|
||||
LOGGER.severe(e.getMessage());
|
||||
}
|
||||
throw new ExitStatusException(ExitStatusException.EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
|
||||
var template = buildTemplate(generatedVersion);
|
||||
writeTemplate(template, generatedVersion);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -206,7 +145,7 @@ public class GeneratedVersionOperation extends AbstractOperation<GeneratedVersio
|
|||
* @return this operation instance
|
||||
*/
|
||||
public GeneratedVersionOperation extension(String extension) {
|
||||
generatedVersion.setExtension(extension);
|
||||
generatedVersion_.setExtension(extension);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
@ -217,11 +156,20 @@ public class GeneratedVersionOperation extends AbstractOperation<GeneratedVersio
|
|||
* @return this operation instance
|
||||
*/
|
||||
public GeneratedVersionOperation fromProject(BaseProject project) {
|
||||
generatedVersion.setProject(project);
|
||||
generatedVersion.setDirectory(project.srcMainJavaDirectory());
|
||||
generatedVersion_.setProject(project);
|
||||
generatedVersion_.setDirectory(project.srcMainJavaDirectory());
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the generated version instance.
|
||||
*
|
||||
* @return the generated version
|
||||
*/
|
||||
public GeneratedVersion generatedVersion() {
|
||||
return generatedVersion_;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the package name.
|
||||
*
|
||||
|
@ -229,7 +177,7 @@ public class GeneratedVersionOperation extends AbstractOperation<GeneratedVersio
|
|||
* @return this operation instance
|
||||
*/
|
||||
public GeneratedVersionOperation packageName(String packageName) {
|
||||
generatedVersion.setPackageName(packageName);
|
||||
generatedVersion_.setPackageName(packageName);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
@ -240,7 +188,7 @@ public class GeneratedVersionOperation extends AbstractOperation<GeneratedVersio
|
|||
* @return this operation instance
|
||||
*/
|
||||
public GeneratedVersionOperation projectName(String projectName) {
|
||||
generatedVersion.setProjectName(projectName);
|
||||
generatedVersion_.setProjectName(projectName);
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/*
|
||||
/**
|
||||
* This file is automatically generated.
|
||||
* Do not modify! -- ALL CHANGES WILL BE ERASED!
|
||||
*/
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2023-2024 the original author or authors.
|
||||
* Copyright 2023-2025 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -16,16 +16,23 @@
|
|||
|
||||
package rife.bld.extension;
|
||||
|
||||
import org.assertj.core.api.AutoCloseableSoftAssertions;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import rife.bld.BaseProject;
|
||||
import rife.bld.Project;
|
||||
import rife.bld.blueprints.BaseProjectBlueprint;
|
||||
import rife.bld.dependencies.VersionNumber;
|
||||
import rife.tools.FileUtils;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Objects;
|
||||
import java.util.logging.ConsoleHandler;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
|
@ -53,6 +60,41 @@ class GeneratedVersionTest {
|
|||
}
|
||||
};
|
||||
|
||||
@BeforeAll
|
||||
static void beforeAll() {
|
||||
var level = Level.ALL;
|
||||
var logger = Logger.getLogger("rife.bld.extension");
|
||||
var consoleHandler = new ConsoleHandler();
|
||||
consoleHandler.setLevel(level);
|
||||
logger.addHandler(consoleHandler);
|
||||
logger.setLevel(level);
|
||||
logger.setUseParentHandlers(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Compares two strings by removing all line separators and whitespace.
|
||||
*
|
||||
* @param text1 The first text to compare
|
||||
* @param text2 The second text to compare
|
||||
* @return true if the texts are equivalent when line separators are ignored, false otherwise
|
||||
*/
|
||||
static boolean compareTextIgnoringLineSeparators(String text1, String text2) {
|
||||
// Handle null cases
|
||||
if (text1 == null && text2 == null) {
|
||||
return true;
|
||||
}
|
||||
if (text1 == null || text2 == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Remove all line separators and whitespace
|
||||
var cleanedText1 = text1.replaceAll("\\r?\\n|\\r|\\s", "");
|
||||
var cleanedText2 = text2.replaceAll("\\r?\\n|\\r|\\s", "");
|
||||
|
||||
// Compare the cleaned strings
|
||||
return cleanedText1.equals(cleanedText2);
|
||||
}
|
||||
|
||||
static void deleteOnExit(File folder) {
|
||||
folder.deleteOnExit();
|
||||
for (var f : Objects.requireNonNull(folder.listFiles())) {
|
||||
|
@ -68,41 +110,43 @@ class GeneratedVersionTest {
|
|||
void testBuildCustomTemplate() {
|
||||
var gv = new GeneratedVersion();
|
||||
gv.setProject(PROJECT);
|
||||
gv.setTemplate(new File(gv.getProject().srcTestResourcesDirectory().getAbsolutePath(),
|
||||
"version_test.txt"));
|
||||
gv.setTemplate(new File(gv.getProject().srcTestResourcesDirectory().getAbsolutePath(), "version_test.txt"));
|
||||
gv.setPackageName("com.example.my");
|
||||
gv.setProjectName("My App");
|
||||
gv.setClassName("MyVersion");
|
||||
|
||||
var t = GeneratedVersionOperation.buildTemplate(gv);
|
||||
assertThat(t.getContent()).isEqualTo("""
|
||||
package com.example.my;
|
||||
|
||||
public final class MyVersion {
|
||||
public static final int PROJECT = "My App";
|
||||
public static final int MAJOR = 2;
|
||||
public static final int MINOR = 1;
|
||||
public static final int REVISION = 3;
|
||||
public static final String QUALIFIER = "";
|
||||
|
||||
private MyVersion() {
|
||||
// no-op
|
||||
}
|
||||
}
|
||||
""");
|
||||
var t = gv.buildTemplate();
|
||||
var v = gv.getProject().version();
|
||||
assertThat(v).extracting("majorInt", "minorInt", "revisionInt").as("version")
|
||||
.containsExactly(2, 1, 3);
|
||||
assertThat(compareTextIgnoringLineSeparators(t.getContent(),
|
||||
String.format("package %s;" +
|
||||
"public final class %s {" +
|
||||
" public static final int PROJECT = \"%s\";" +
|
||||
" public static final int MAJOR = %d;" +
|
||||
" public static final int MINOR = %d;" +
|
||||
" public static final int REVISION = %d;" +
|
||||
" public static final String QUALIFIER = \"\";" +
|
||||
" private MyVersion() {" +
|
||||
" // no-op" +
|
||||
" }" +
|
||||
"}", gv.getPackageName(), gv.getClassName(), gv.getProjectName(), v.majorInt(),
|
||||
v.minorInt(), v.revisionInt()))).as("template").isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
void testBuildTemplate() {
|
||||
var gv = new GeneratedVersion();
|
||||
gv.setProject(PROJECT);
|
||||
var t = GeneratedVersionOperation.buildTemplate(gv);
|
||||
|
||||
var t = gv.buildTemplate();
|
||||
assertThat(t).isNotNull();
|
||||
|
||||
assertThat(gv.getProject()).isEqualTo(PROJECT);
|
||||
assertThat(gv.getPackageName()).isEqualTo(PROJECT.pkg());
|
||||
assertThat(gv.getProjectName()).isEqualTo(PROJECT.name());
|
||||
try (var softly = new AutoCloseableSoftAssertions()) {
|
||||
softly.assertThat(gv.getProject()).isEqualTo(PROJECT);
|
||||
softly.assertThat(gv.getPackageName()).isEqualTo(PROJECT.pkg());
|
||||
softly.assertThat(gv.getProjectName()).isEqualTo(PROJECT.name());
|
||||
}
|
||||
|
||||
assertThat(t.getContent()).contains("package com.example;").contains("class GeneratedVersion")
|
||||
.contains("PROJECT = \"MyExample\";").contains("MAJOR = 2").contains("MINOR = 1")
|
||||
|
@ -111,22 +155,107 @@ class GeneratedVersionTest {
|
|||
}
|
||||
|
||||
@Test
|
||||
void testWriteTemplate() throws IOException {
|
||||
var tmpDir = Files.createTempDirectory("bld-generated-version-").toFile();
|
||||
tmpDir.deleteOnExit();
|
||||
var gv = new GeneratedVersion();
|
||||
void testDirectories() {
|
||||
var foo = new File("foo");
|
||||
var bar = new File("bar");
|
||||
|
||||
var op = new GeneratedVersionOperation().directory(foo);
|
||||
assertThat(op.generatedVersion().getDirectory()).as("as file").isEqualTo(foo);
|
||||
|
||||
op = op.directory(bar.toPath());
|
||||
assertThat(op.generatedVersion().getDirectory()).as("as path").isEqualTo(bar);
|
||||
|
||||
op = op.directory("foo");
|
||||
assertThat(op.generatedVersion().getDirectory()).as("as string").isEqualTo(foo);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testExample() throws Exception {
|
||||
var tmpDir = Files.createTempDirectory("bld-generated-version-example-").toFile();
|
||||
tmpDir.deleteOnExit();
|
||||
|
||||
new GeneratedVersionOperation()
|
||||
.fromProject(new BaseProjectBlueprint(new File("examples"), "com.example", "Example", "Example"))
|
||||
.directory(tmpDir.getAbsolutePath())
|
||||
//.classTemplate(new File("examples", "my_app_version.txt"))
|
||||
.classTemplate(new File("examples", "version.txt"))
|
||||
.execute();
|
||||
|
||||
deleteOnExit(tmpDir);
|
||||
|
||||
var template = Path.of(tmpDir.getAbsolutePath(), "com", "example", "GeneratedVersion.java");
|
||||
assertThat(template).exists();
|
||||
|
||||
var content = Files.readString(template);
|
||||
assertThat(content).contains("class GeneratedVersion").contains("PROJECT = \"Example\";")
|
||||
.contains("MAJOR = 0").contains("MINOR = 0").contains("REVISION = 1").contains("QUALIFIER = \"\"")
|
||||
.doesNotContain("ERASED!"); // only in default template
|
||||
}
|
||||
|
||||
@Test
|
||||
void testExecute() throws Exception {
|
||||
var tmpDir = Files.createTempDirectory("bld-generated-version-execute-").toFile();
|
||||
tmpDir.deleteOnExit();
|
||||
|
||||
new GeneratedVersionOperation()
|
||||
.fromProject(PROJECT)
|
||||
.directory(tmpDir.getAbsolutePath())
|
||||
.extension(".java")
|
||||
.classTemplate("src/test/resources/foo/version_test.txt")
|
||||
.packageName("")
|
||||
.className("MyVersion")
|
||||
.execute();
|
||||
|
||||
deleteOnExit(tmpDir);
|
||||
|
||||
var template = new File(tmpDir, "MyVersion.java");
|
||||
assertThat(template).exists();
|
||||
|
||||
var content = Files.readString(template.toPath());
|
||||
assertThat(content).contains("class MyVersion")
|
||||
.contains("PROJECT = \"MyExample\";").contains("MAJOR = 2").contains("MINOR = 1")
|
||||
.contains("REVISION = 3").contains("QUALIFIER = \"\"").contains("private MyVersion")
|
||||
.doesNotContain("package");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGeneratedVersion() {
|
||||
var gv = new GeneratedVersion();
|
||||
gv.setProject(PROJECT);
|
||||
gv.setTemplate(new File(gv.getProject().srcTestResourcesDirectory().getAbsolutePath(), "version_test.txt"));
|
||||
gv.setPackageName("com.example.cool");
|
||||
gv.setProjectName("Cool App");
|
||||
gv.setClassName("CoolVersion");
|
||||
gv.setDirectory(new File("build"));
|
||||
gv.setExtension(".java");
|
||||
|
||||
try (var softly = new AutoCloseableSoftAssertions()) {
|
||||
softly.assertThat(gv.getProject()).as("project").isEqualTo(PROJECT);
|
||||
softly.assertThat(gv.getTemplate()).as("template").exists();
|
||||
softly.assertThat(gv.getPackageName()).as("package name").isEqualTo("com.example.cool");
|
||||
softly.assertThat(gv.getProjectName()).as("project name").isEqualTo("Cool App");
|
||||
softly.assertThat(gv.getClassName()).as("class name").isEqualTo("CoolVersion");
|
||||
softly.assertThat(gv.getExtension()).as("extension").isEqualTo(".java");
|
||||
softly.assertThat(gv.getDirectory()).as("directory").isDirectory();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void testWriteTemplate() throws IOException {
|
||||
var tmpDir = Files.createTempDirectory("bld-generated-version-write-").toFile();
|
||||
tmpDir.deleteOnExit();
|
||||
|
||||
var gv = new GeneratedVersion();
|
||||
gv.setProject(PROJECT);
|
||||
gv.setDirectory(tmpDir);
|
||||
|
||||
var t = GeneratedVersionOperation.buildTemplate(gv);
|
||||
|
||||
GeneratedVersionOperation.writeTemplate(t, gv);
|
||||
|
||||
assertThat(gv.getClassFile()).exists();
|
||||
var t = gv.buildTemplate();
|
||||
gv.writeTemplate(t);
|
||||
|
||||
deleteOnExit(tmpDir);
|
||||
|
||||
assertThat(gv.getClassFile()).exists();
|
||||
|
||||
var versionClass = FileUtils.readString(gv.getClassFile());
|
||||
assertThat(versionClass).contains("package com.example;").contains("class GeneratedVersion")
|
||||
.contains("MAJOR = 2").contains("MINOR = 1").contains("REVISION = 3")
|
||||
|
|
11
src/test/resources/foo/version_test.txt
Normal file
11
src/test/resources/foo/version_test.txt
Normal file
|
@ -0,0 +1,11 @@
|
|||
public final class {{v className/}} {
|
||||
public static final int PROJECT = "{{v project/}}";
|
||||
public static final int MAJOR = {{v major/}};
|
||||
public static final int MINOR = {{v minor/}};
|
||||
public static final int REVISION = {{v revision/}};
|
||||
public static final String QUALIFIER = "{{v qualifier/}}";
|
||||
|
||||
private {{v className/}}() {
|
||||
// no-op
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue