Compare commits
74 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 | |||
26fbb9e02d | |||
888b9c80d8 | |||
3186adb264 | |||
5a028425fb | |||
39a981cbd4 | |||
b3dfc0980b | |||
6a1dc286da | |||
1090f06fdf | |||
f8003c72f0 | |||
b56f684ac8 | |||
e0afec2955 | |||
f4a14951b7 | |||
5a4c4ef62e | |||
f19a52e3d5 |
37 changed files with 965 additions and 355 deletions
29
.github/workflows/bld.yml
vendored
29
.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, 19, 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
|
||||
- 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>
|
2
.idea/copyright/Apache_License.xml
generated
2
.idea/copyright/Apache_License.xml
generated
|
@ -1,6 +1,6 @@
|
|||
<component name="CopyrightManager">
|
||||
<copyright>
|
||||
<option name="notice" value=" Copyright &#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>
|
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 |
204
.idea/intellij-javadocs-4.0.1.xml
generated
Normal file
204
.idea/intellij-javadocs-4.0.1.xml
generated
Normal file
|
@ -0,0 +1,204 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="JavaDocConfiguration">
|
||||
<GENERAL>
|
||||
<MODE>UPDATE</MODE>
|
||||
<OVERRIDDEN_METHODS>false</OVERRIDDEN_METHODS>
|
||||
<SPLITTED_CLASS_NAME>true</SPLITTED_CLASS_NAME>
|
||||
<LEVELS>
|
||||
<LEVEL>FIELD</LEVEL>
|
||||
<LEVEL>METHOD</LEVEL>
|
||||
<LEVEL>TYPE</LEVEL>
|
||||
</LEVELS>
|
||||
<VISIBILITIES>
|
||||
<VISIBILITY>PUBLIC</VISIBILITY>
|
||||
<VISIBILITY>PROTECTED</VISIBILITY>
|
||||
<VISIBILITY>DEFAULT</VISIBILITY>
|
||||
</VISIBILITIES>
|
||||
</GENERAL>
|
||||
<TEMPLATES>
|
||||
<CLASSES>
|
||||
<CLASS>
|
||||
<KEY>^.*(public|protected|private)*.+interface\s+\w+.*</KEY>
|
||||
<VALUE>/**\n
|
||||
* The interface ${name}.\n
|
||||
<#if element.typeParameters?has_content> * \n
|
||||
</#if>
|
||||
<#list element.typeParameters as typeParameter>
|
||||
* @param <${typeParameter.name}> the type parameter\n
|
||||
</#list>
|
||||
*/</VALUE>
|
||||
</CLASS>
|
||||
<CLASS>
|
||||
<KEY>^.*(public|protected|private)*.+enum\s+\w+.*</KEY>
|
||||
<VALUE>/**\n
|
||||
* The enum ${name}.\n
|
||||
*/</VALUE>
|
||||
</CLASS>
|
||||
<CLASS>
|
||||
<KEY>^.*(public|protected|private)*.+class\s+\w+.*</KEY>
|
||||
<VALUE>/**\n
|
||||
* The type ${name}.\n
|
||||
<#if element.typeParameters?has_content> * \n
|
||||
</#if>
|
||||
<#list element.typeParameters as typeParameter>
|
||||
* @param <${typeParameter.name}> the type parameter\n
|
||||
</#list>
|
||||
*/</VALUE>
|
||||
</CLASS>
|
||||
<CLASS>
|
||||
<KEY>.+</KEY>
|
||||
<VALUE>/**\n
|
||||
* The type ${name}.\n
|
||||
*/</VALUE>
|
||||
</CLASS>
|
||||
</CLASSES>
|
||||
<CONSTRUCTORS>
|
||||
<CONSTRUCTOR>
|
||||
<KEY>.+</KEY>
|
||||
<VALUE>/**\n
|
||||
* Instantiates a new ${name}.\n
|
||||
<#if element.parameterList.parameters?has_content>
|
||||
*\n
|
||||
</#if>
|
||||
<#list element.parameterList.parameters as parameter>
|
||||
* @param ${parameter.name} the ${paramNames[parameter.name]}\n
|
||||
</#list>
|
||||
<#if element.throwsList.referenceElements?has_content>
|
||||
*\n
|
||||
</#if>
|
||||
<#list element.throwsList.referenceElements as exception>
|
||||
* @throws ${exception.referenceName} the ${exceptionNames[exception.referenceName]}\n
|
||||
</#list>
|
||||
*/</VALUE>
|
||||
</CONSTRUCTOR>
|
||||
</CONSTRUCTORS>
|
||||
<METHODS>
|
||||
<METHOD>
|
||||
<KEY>^.*(public|protected|private)*\s*.*(\w(\s*<.+>)*)+\s+get\w+\s*\(.*\).+</KEY>
|
||||
<VALUE>/**\n
|
||||
* Gets ${partName}.\n
|
||||
<#if element.typeParameters?has_content> * \n
|
||||
</#if>
|
||||
<#list element.typeParameters as typeParameter>
|
||||
* @param <${typeParameter.name}> the type parameter\n
|
||||
</#list>
|
||||
<#if element.parameterList.parameters?has_content>
|
||||
*\n
|
||||
</#if>
|
||||
<#list element.parameterList.parameters as parameter>
|
||||
* @param ${parameter.name} the ${paramNames[parameter.name]}\n
|
||||
</#list>
|
||||
<#if isNotVoid>
|
||||
*\n
|
||||
* @return the ${partName}\n
|
||||
</#if>
|
||||
<#if element.throwsList.referenceElements?has_content>
|
||||
*\n
|
||||
</#if>
|
||||
<#list element.throwsList.referenceElements as exception>
|
||||
* @throws ${exception.referenceName} the ${exceptionNames[exception.referenceName]}\n
|
||||
</#list>
|
||||
*/</VALUE>
|
||||
</METHOD>
|
||||
<METHOD>
|
||||
<KEY>^.*(public|protected|private)*\s*.*(void|\w(\s*<.+>)*)+\s+set\w+\s*\(.*\).+</KEY>
|
||||
<VALUE>/**\n
|
||||
* Sets ${partName}.\n
|
||||
<#if element.typeParameters?has_content> * \n
|
||||
</#if>
|
||||
<#list element.typeParameters as typeParameter>
|
||||
* @param <${typeParameter.name}> the type parameter\n
|
||||
</#list>
|
||||
<#if element.parameterList.parameters?has_content>
|
||||
*\n
|
||||
</#if>
|
||||
<#list element.parameterList.parameters as parameter>
|
||||
* @param ${parameter.name} the ${paramNames[parameter.name]}\n
|
||||
</#list>
|
||||
<#if isNotVoid>
|
||||
*\n
|
||||
* @return the ${partName}\n
|
||||
</#if>
|
||||
<#if element.throwsList.referenceElements?has_content>
|
||||
*\n
|
||||
</#if>
|
||||
<#list element.throwsList.referenceElements as exception>
|
||||
* @throws ${exception.referenceName} the ${exceptionNames[exception.referenceName]}\n
|
||||
</#list>
|
||||
*/</VALUE>
|
||||
</METHOD>
|
||||
<METHOD>
|
||||
<KEY>^.*((public\s+static)|(static\s+public))\s+void\s+main\s*\(\s*String\s*(\[\s*\]|\.\.\.)\s+\w+\s*\).+</KEY>
|
||||
<VALUE>/**\n
|
||||
* The entry point of application.\n
|
||||
|
||||
<#if element.parameterList.parameters?has_content>
|
||||
*\n
|
||||
</#if>
|
||||
* @param ${element.parameterList.parameters[0].name} the input arguments\n
|
||||
<#if element.throwsList.referenceElements?has_content>
|
||||
*\n
|
||||
</#if>
|
||||
<#list element.throwsList.referenceElements as exception>
|
||||
* @throws ${exception.referenceName} the ${exceptionNames[exception.referenceName]}\n
|
||||
</#list>
|
||||
*/</VALUE>
|
||||
</METHOD>
|
||||
<METHOD>
|
||||
<KEY>.+</KEY>
|
||||
<VALUE>/**\n
|
||||
* ${name}<#if isNotVoid> ${return}</#if>.\n
|
||||
<#if element.typeParameters?has_content> * \n
|
||||
</#if>
|
||||
<#list element.typeParameters as typeParameter>
|
||||
* @param <${typeParameter.name}> the type parameter\n
|
||||
</#list>
|
||||
<#if element.parameterList.parameters?has_content>
|
||||
*\n
|
||||
</#if>
|
||||
<#list element.parameterList.parameters as parameter>
|
||||
* @param ${parameter.name} the ${paramNames[parameter.name]}\n
|
||||
</#list>
|
||||
<#if isNotVoid>
|
||||
*\n
|
||||
* @return the ${return}\n
|
||||
</#if>
|
||||
<#if element.throwsList.referenceElements?has_content>
|
||||
*\n
|
||||
</#if>
|
||||
<#list element.throwsList.referenceElements as exception>
|
||||
* @throws ${exception.referenceName} the ${exceptionNames[exception.referenceName]}\n
|
||||
</#list>
|
||||
*/</VALUE>
|
||||
</METHOD>
|
||||
</METHODS>
|
||||
<FIELDS>
|
||||
<FIELD>
|
||||
<KEY>^.*(public|protected|private)*.+static.*(\w\s\w)+.+</KEY>
|
||||
<VALUE>/**\n
|
||||
* The constant ${element.getName()}.\n
|
||||
*/</VALUE>
|
||||
</FIELD>
|
||||
<FIELD>
|
||||
<KEY>^.*(public|protected|private)*.*(\w\s\w)+.+</KEY>
|
||||
<VALUE>/**\n
|
||||
<#if element.parent.isInterface()>
|
||||
* The constant ${element.getName()}.\n
|
||||
<#else>
|
||||
* The ${name}.\n
|
||||
</#if> */</VALUE>
|
||||
</FIELD>
|
||||
<FIELD>
|
||||
<KEY>.+</KEY>
|
||||
<VALUE>/**\n
|
||||
<#if element.parent.isEnum()>
|
||||
*${name} ${typeName}.\n
|
||||
<#else>
|
||||
* The ${name}.\n
|
||||
</#if>*/</VALUE>
|
||||
</FIELD>
|
||||
</FIELDS>
|
||||
</TEMPLATES>
|
||||
</component>
|
||||
</project>
|
7
.idea/libraries/bld.xml
generated
7
.idea/libraries/bld.xml
generated
|
@ -2,11 +2,12 @@
|
|||
<library name="bld">
|
||||
<CLASSES>
|
||||
<root url="file://$PROJECT_DIR$/lib/bld" />
|
||||
<root url="jar://$USER_HOME$/.bld/dist/bld-1.7.0.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.bld/dist/bld-2.2.1.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES>
|
||||
<root url="jar://$USER_HOME$/.bld/dist/bld-1.7.0-sources.jar!/" />
|
||||
<root url="file://$PROJECT_DIR$/lib/bld" />
|
||||
<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!/" />
|
||||
|
@ -14,4 +15,4 @@
|
|||
<jarDirectory url="file://$PROJECT_DIR$/lib/bld" recursive="false" />
|
||||
<jarDirectory url="file://$PROJECT_DIR$/lib/bld" recursive="false" type="SOURCES" />
|
||||
</library>
|
||||
</component>
|
||||
</component>
|
||||
|
|
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>
|
8
.idea/misc.xml
generated
8
.idea/misc.xml
generated
|
@ -1,3 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="EntryPointsManager">
|
||||
<pattern value="rife.bld.extension.GeneratedVersionOperation" method="className" />
|
||||
|
@ -8,11 +9,18 @@
|
|||
<pattern value="rife.bld.extension.GeneratedVersionOperation" method="projectName" />
|
||||
<pattern value="rife.bld.extension.GeneratedVersionOperationBuild" />
|
||||
<pattern value="rife.bld.extension.GeneratedVersionOperationBuild" method="pmd" />
|
||||
<pattern value="rife.bld.extension.GeneratedVersionOperationBuild" method="jacoco" />
|
||||
</component>
|
||||
<component name="PDMPlugin">
|
||||
<option name="customRuleSets">
|
||||
<list>
|
||||
<option value="$PROJECT_DIR$/config/pmd.xml" />
|
||||
<option value="K:\java\semver\config\pmd.xml" />
|
||||
<option value="$PROJECT_DIR$/../bld-pitest/config/pmd.xml" />
|
||||
<option value="$PROJECT_DIR$/../bld-jacoco-report/config/pmd.xml" />
|
||||
<option value="$PROJECT_DIR$/../bld-checkstyle/config/pmd.xml" />
|
||||
<option value="$PROJECT_DIR$/../bld-exec/config/pmd.xml" />
|
||||
<option value="$PROJECT_DIR$/../bld-testng/config/pmd.xml" />
|
||||
</list>
|
||||
</option>
|
||||
<option name="skipTestSources" value="false" />
|
||||
|
|
9
.vscode/launch.json
vendored
9
.vscode/launch.json
vendored
|
@ -5,7 +5,14 @@
|
|||
"type": "java",
|
||||
"name": "Run Tests",
|
||||
"request": "launch",
|
||||
"mainClass": "rife.bld.extension.GeneratedVersionOperationTest"
|
||||
"mainClass": "org.junit.platform.console.ConsoleLauncher",
|
||||
"args": [
|
||||
"--details=verbose",
|
||||
"--scan-classpath",
|
||||
"--disable-banner",
|
||||
"--disable-ansi-colors",
|
||||
"--exclude-engine=junit-platform-suite",
|
||||
"--exclude-engine=junit-vintage"]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
10
.vscode/settings.json
vendored
10
.vscode/settings.json
vendored
|
@ -3,13 +3,13 @@
|
|||
"src/main/java",
|
||||
"src/main/resources",
|
||||
"src/test/java",
|
||||
"src/bld/java"
|
||||
"src/test/resources",
|
||||
"src/bld/java",
|
||||
"src/bld/resources"
|
||||
],
|
||||
"java.configuration.updateBuildConfiguration": "automatic",
|
||||
"java.project.referencedLibraries": [
|
||||
"${HOME}bld-1.7.0-SNAPSHOT.jar",
|
||||
"lib/compile/*.jar",
|
||||
"lib/runtime/*.jar",
|
||||
"lib/test/*.jar"
|
||||
"${HOME}/.bld/dist/bld-2.2.1.jar",
|
||||
"lib/**/*.jar"
|
||||
]
|
||||
}
|
||||
|
|
20
README.md
20
README.md
|
@ -1,14 +1,22 @@
|
|||
# [Bld](https://rife2.com/bld) Extension to Generate a Project Version Data Class
|
||||
# [bld](https://rife2.com/bld) Extension to Generate a Project Version Data Class
|
||||
|
||||
|
||||
[](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
|
||||
|
@ -26,7 +34,7 @@ public void genver() throws Exception {
|
|||
}
|
||||
```
|
||||
|
||||
```text
|
||||
```console
|
||||
./bld compile
|
||||
```
|
||||
|
||||
|
@ -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>
|
||||
|
|
7
examples/.idea/libraries/bld.xml
generated
7
examples/.idea/libraries/bld.xml
generated
|
@ -2,11 +2,12 @@
|
|||
<library name="bld">
|
||||
<CLASSES>
|
||||
<root url="file://$PROJECT_DIR$/lib/bld" />
|
||||
<root url="jar://$USER_HOME$/.bld/dist/bld-1.7.0.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.bld/dist/bld-2.2.1.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES>
|
||||
<root url="jar://$USER_HOME$/.bld/dist/bld-1.7.0-sources.jar!/" />
|
||||
<root url="file://$PROJECT_DIR$/lib/bld" />
|
||||
<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!/" />
|
||||
|
@ -14,4 +15,4 @@
|
|||
<jarDirectory url="file://$PROJECT_DIR$/lib/bld" recursive="false" />
|
||||
<jarDirectory url="file://$PROJECT_DIR$/lib/bld" recursive="false" type="SOURCES" />
|
||||
</library>
|
||||
</component>
|
||||
</component>
|
||||
|
|
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>
|
13
examples/.vscode/launch.json
vendored
13
examples/.vscode/launch.json
vendored
|
@ -6,19 +6,6 @@
|
|||
"name": "Run Main",
|
||||
"request": "launch",
|
||||
"mainClass": "com.example.SampleMain"
|
||||
},
|
||||
{
|
||||
"type": "java",
|
||||
"name": "Run Tests",
|
||||
"request": "launch",
|
||||
"mainClass": "org.junit.platform.console.ConsoleLauncher",
|
||||
"args": [
|
||||
"--details=verbose",
|
||||
"--scan-classpath",
|
||||
"--disable-banner",
|
||||
"--disable-ansi-colors",
|
||||
"--exclude-engine=junit-platform-suite",
|
||||
"--exclude-engine=junit-vintage"]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
10
examples/.vscode/settings.json
vendored
10
examples/.vscode/settings.json
vendored
|
@ -3,13 +3,13 @@
|
|||
"src/main/java",
|
||||
"src/main/resources",
|
||||
"src/test/java",
|
||||
"src/bld/java"
|
||||
"src/test/resources",
|
||||
"src/bld/java",
|
||||
"src/bld/resources"
|
||||
],
|
||||
"java.configuration.updateBuildConfiguration": "automatic",
|
||||
"java.project.referencedLibraries": [
|
||||
"${HOME}bld-1.7.0.jar",
|
||||
"lib/compile/*.jar",
|
||||
"lib/runtime/*.jar",
|
||||
"lib/test/*.jar"
|
||||
"${HOME}/.bld/dist/bld-2.2.1.jar",
|
||||
"lib/**/*.jar"
|
||||
]
|
||||
}
|
||||
|
|
5
examples/README.md
Normal file
5
examples/README.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
# Compile and Run Example
|
||||
|
||||
```console
|
||||
./bld compile run
|
||||
```
|
Binary file not shown.
|
@ -1,6 +1,6 @@
|
|||
bld.downloadExtensionJavadoc=false
|
||||
bld.downloadExtensionSources=true
|
||||
bld.extensions=com.uwyn.rife2:bld-generated-version:0.9.1
|
||||
bld.repositories=RIFE2_SNAPSHOTS,RIFE2_RELEASES,MAVEN_CENTRAL
|
||||
bld.downloadLocation=
|
||||
bld.version=1.7.1
|
||||
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,13 +4,15 @@ 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;
|
||||
import static rife.bld.dependencies.Repository.RIFE2_RELEASES;
|
||||
import static rife.bld.dependencies.Scope.test;
|
||||
|
||||
/**
|
||||
* Example build.
|
||||
*/
|
||||
public class SampleBuild extends Project {
|
||||
public SampleBuild() {
|
||||
pkg = "com.example";
|
||||
|
@ -18,11 +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, 9, 3)))
|
||||
.include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 9, 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)));
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
@ -40,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(1683929981786L);
|
||||
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;
|
||||
|
|
|
@ -15,7 +15,7 @@ public class SampleMain {
|
|||
System.out.println(" Major: " + GeneratedVersion.MAJOR);
|
||||
System.out.println(" Minor: " + GeneratedVersion.MINOR);
|
||||
System.out.println(" Revision: " + GeneratedVersion.REVISION);
|
||||
System.out.println(" Qualifier:: " + GeneratedVersion.QUALIFIER);
|
||||
System.out.println(" Qualifier: " + GeneratedVersion.QUALIFIER);
|
||||
|
||||
System.out.println("-----------------------------------------------------");
|
||||
}
|
||||
|
|
Binary file not shown.
|
@ -1,7 +1,6 @@
|
|||
bld.downloadExtensionJavadoc=false
|
||||
bld.downloadExtensionSources=true
|
||||
bld.extension-pmd=com.uwyn.rife2:bld-pmd:0.9.2
|
||||
bld.extension-jacoco=com.uwyn.rife2:bld-jacoco-report:0.9.0
|
||||
bld.repositories=RIFE2_SNAPSHOTS,RIFE2_RELEASES,MAVEN_CENTRAL
|
||||
bld.downloadLocation=
|
||||
bld.version=1.7.1
|
||||
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,3 +1,19 @@
|
|||
/*
|
||||
* 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.
|
||||
* 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.
|
||||
*/
|
||||
|
||||
package rife.bld.extension;
|
||||
|
||||
import rife.bld.BuildCommand;
|
||||
|
@ -6,7 +22,6 @@ 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.*;
|
||||
|
@ -19,27 +34,28 @@ public class GeneratedVersionOperationBuild extends Project {
|
|||
public GeneratedVersionOperationBuild() {
|
||||
pkg = "rife.bld.extension";
|
||||
name = "GeneratedVersionOperation";
|
||||
version = version(0, 9, 1);
|
||||
version = version(1, 0, 1);
|
||||
|
||||
javaRelease = 17;
|
||||
|
||||
downloadSources = true;
|
||||
autoDownloadPurge = true;
|
||||
repositories = List.of(MAVEN_CENTRAL, RIFE2_RELEASES);
|
||||
|
||||
var rife2 = version(1, 7, 0);
|
||||
repositories = List.of(MAVEN_CENTRAL, RIFE2_RELEASES, RIFE2_SNAPSHOTS);
|
||||
|
||||
scope(compile)
|
||||
.include(dependency("com.uwyn.rife2", "rife2", rife2))
|
||||
.include(dependency("com.uwyn.rife2", "bld", version(1, 7, 1)));
|
||||
.include(dependency("com.uwyn.rife2", "bld", version(2, 2, 1)));
|
||||
scope(test)
|
||||
.include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 10, 0)))
|
||||
.include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 10, 0)))
|
||||
.include(dependency("org.assertj:assertj-joda-time:2.2.0"));
|
||||
.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);
|
||||
|
||||
javadocOperation()
|
||||
.javadocOptions()
|
||||
.author()
|
||||
.docLint(NO_MISSING)
|
||||
.link("https://rife2.github.io/bld/")
|
||||
.link("https://rife2.github.io/rife2/")
|
||||
|
@ -47,18 +63,27 @@ 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/"))
|
||||
.license(new PublishLicense().name("The Apache License, Version 2.0")
|
||||
.url("http://www.apache.org/licenses/LICENSE-2.0.txt"))
|
||||
.scm(new PublishScm().connection("scm:git:https://github.com/rife2/generated-version.git")
|
||||
.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("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"))
|
||||
.url("https://github.com/rife2/generated-version")
|
||||
)
|
||||
.signKey(property("sign.key"))
|
||||
.signPassphrase(property("sign.passphrase"));
|
||||
}
|
||||
|
@ -67,13 +92,6 @@ 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() throws Exception {
|
||||
new PmdOperation()
|
||||
|
|
|
@ -1,24 +1,32 @@
|
|||
/*
|
||||
* Copyright 2023 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.
|
||||
* You may obtain a copy of the License at
|
||||
* 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
|
||||
* 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.
|
||||
* 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.
|
||||
*/
|
||||
|
||||
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,96 +34,251 @@ 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 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_;
|
||||
|
||||
/**
|
||||
* Returns the class file.
|
||||
* Builds the template based on the {@link GeneratedVersion} data.
|
||||
*
|
||||
* @return the template
|
||||
*/
|
||||
public File getClassFile() {
|
||||
return classFile;
|
||||
}
|
||||
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());
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the class file.
|
||||
*/
|
||||
public void setClassFile(File classFile) {
|
||||
this.classFile = classFile;
|
||||
}
|
||||
if (packageName_ == null) {
|
||||
packageName_ = project_.pkg();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the class name.
|
||||
*/
|
||||
public String getClassName() {
|
||||
return className;
|
||||
}
|
||||
if (template.hasValueId(PACKAGE_NAME)) {
|
||||
template.setValue(PACKAGE_NAME, packageName_);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the class name.
|
||||
*/
|
||||
public void setClassName(String className) {
|
||||
this.className = className;
|
||||
}
|
||||
if (template.hasValueId(CLASSNAME)) {
|
||||
template.setValue(CLASSNAME, className_);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the package name.
|
||||
*/
|
||||
public String getPackageName() {
|
||||
return packageName;
|
||||
}
|
||||
if (template.hasValueId(PROJECT)) {
|
||||
if (projectName_ == null) {
|
||||
projectName_ = project_.name();
|
||||
}
|
||||
template.setValue(PROJECT, projectName_);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the package name.
|
||||
*/
|
||||
public void setPackageName(String packageName) {
|
||||
this.packageName = packageName;
|
||||
}
|
||||
if (template.hasValueId(EPOCH)) {
|
||||
template.setValue(EPOCH, System.currentTimeMillis());
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the project.
|
||||
*/
|
||||
public BaseProject getProject() {
|
||||
return project;
|
||||
}
|
||||
if (template.hasValueId(VERSION)) {
|
||||
template.setValue(VERSION, version.toString());
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the project.
|
||||
*/
|
||||
public void setProject(BaseProject project) {
|
||||
this.project = project;
|
||||
}
|
||||
if (template.hasValueId(MAJOR)) {
|
||||
template.setValue(MAJOR, version.majorInt());
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the project name.
|
||||
*/
|
||||
public String getProjectName() {
|
||||
return projectName;
|
||||
}
|
||||
if (template.hasValueId(MINOR)) {
|
||||
template.setValue(MINOR, version.minorInt());
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the project name.
|
||||
*/
|
||||
public void setProjectName(String projectName) {
|
||||
this.projectName = projectName;
|
||||
}
|
||||
if (template.hasValueId(REVISION)) {
|
||||
template.setValue(REVISION, version.revisionInt());
|
||||
}
|
||||
|
||||
if (template.hasValueId(QUALIFIER)) {
|
||||
template.setValue(QUALIFIER, version.qualifier());
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the template.
|
||||
*/
|
||||
public File getTemplate() {
|
||||
return template;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the class file.
|
||||
*
|
||||
* @return the class file
|
||||
*/
|
||||
public File getClassFile() {
|
||||
return classFile_;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the class name.
|
||||
*
|
||||
* @return the class name
|
||||
*/
|
||||
public String getClassName() {
|
||||
return className_;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the destination directory.
|
||||
*
|
||||
* @return the destination directory
|
||||
*/
|
||||
public File getDirectory() {
|
||||
return directory_;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the file extension.
|
||||
*
|
||||
* @return the file extension
|
||||
*/
|
||||
public String getExtension() {
|
||||
return extension_;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the package name.
|
||||
*
|
||||
* @return the package name
|
||||
*/
|
||||
public String getPackageName() {
|
||||
return packageName_;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the project.
|
||||
*
|
||||
* @return the project
|
||||
*/
|
||||
public BaseProject getProject() {
|
||||
return project_;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the project name.
|
||||
*
|
||||
* @return the project name
|
||||
*/
|
||||
public String getProjectName() {
|
||||
return projectName_;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the template.
|
||||
*
|
||||
* @return the template
|
||||
*/
|
||||
public File getTemplate() {
|
||||
return template_;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the class name.
|
||||
*
|
||||
* @param className the class name
|
||||
*/
|
||||
public void setClassName(String className) {
|
||||
this.className_ = className;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the destination directory.
|
||||
*
|
||||
* @param directory the destination directory
|
||||
*/
|
||||
public void setDirectory(File directory) {
|
||||
this.directory_ = directory;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the file extension. (Default is: {@code .java})
|
||||
*
|
||||
* @param extension the file extension
|
||||
*/
|
||||
public void setExtension(String extension) {
|
||||
this.extension_ = extension;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the package name.
|
||||
*
|
||||
* @param packageName the package name
|
||||
*/
|
||||
public void setPackageName(String packageName) {
|
||||
this.packageName_ = packageName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the project.
|
||||
*
|
||||
* @param project the project
|
||||
*/
|
||||
public void setProject(BaseProject project) {
|
||||
this.project_ = project;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the project name.
|
||||
*
|
||||
* @param projectName the project name
|
||||
*/
|
||||
public void setProjectName(String projectName) {
|
||||
this.projectName_ = projectName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the template file.
|
||||
*
|
||||
* @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,17 +1,17 @@
|
|||
/*
|
||||
* Copyright 2023 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.
|
||||
* You may obtain a copy of the License at
|
||||
* 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
|
||||
* 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.
|
||||
* 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.
|
||||
*/
|
||||
|
||||
package rife.bld.extension;
|
||||
|
@ -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,163 +33,162 @@ 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.
|
||||
*/
|
||||
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.
|
||||
*/
|
||||
public static void writeTemplate(Template template, File directory, GeneratedVersion gv) {
|
||||
if (gv.getPackageName() != null) {
|
||||
gv.setClassFile(Path.of(directory.getAbsolutePath(),
|
||||
gv.getPackageName().replace(".", File.separator), gv.getClassName() + ".java").toFile());
|
||||
} else {
|
||||
gv.setClassFile(Path.of(directory.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 class has been {0} to {1}: {2}",
|
||||
new String[]{updated ? "updated" : "created", gv.getProject().version().toString(),
|
||||
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.
|
||||
*
|
||||
* @param className the class name
|
||||
* @return this operation instance
|
||||
*/
|
||||
public GeneratedVersionOperation className(String className) {
|
||||
generatedVersion.setClassName(className);
|
||||
generatedVersion_.setClassName(className);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the class template path.
|
||||
*
|
||||
* @param template the template path
|
||||
* @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.
|
||||
*
|
||||
* @param directory the destination directory
|
||||
* @return this operation instance
|
||||
*/
|
||||
public GeneratedVersionOperation directory(File 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.getProject().srcMainJavaDirectory(), generatedVersion);
|
||||
}
|
||||
|
||||
/**
|
||||
* Configure the operation from a {@link BaseProject}.
|
||||
* Sets the file extension. (Default is: {@code .java})
|
||||
*
|
||||
* @param extension the file extension
|
||||
* @return this operation instance
|
||||
*/
|
||||
public GeneratedVersionOperation fromProject(BaseProject project) {
|
||||
generatedVersion.setProject(project);
|
||||
public GeneratedVersionOperation extension(String extension) {
|
||||
generatedVersion_.setExtension(extension);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configure the operation from a {@link BaseProject}.
|
||||
*
|
||||
* @param project the project
|
||||
* @return this operation instance
|
||||
*/
|
||||
public GeneratedVersionOperation fromProject(BaseProject project) {
|
||||
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.
|
||||
*
|
||||
* @param packageName the package name
|
||||
* @return this operation instance
|
||||
*/
|
||||
public GeneratedVersionOperation packageName(String packageName) {
|
||||
generatedVersion.setPackageName(packageName);
|
||||
generatedVersion_.setPackageName(packageName);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the project name.
|
||||
*
|
||||
* @param projectName the project name
|
||||
* @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,31 +1,38 @@
|
|||
/*
|
||||
* Copyright 2023 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.
|
||||
* You may obtain a copy of the License at
|
||||
* 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
|
||||
* 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.
|
||||
* 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.
|
||||
*/
|
||||
|
||||
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,30 +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()).contains("package com.example.my;").contains("class MyVersion")
|
||||
.contains("MAJOR = 2").contains("MINOR = 1").contains("REVISION = 3").contains("QUALIFIER = \"\"")
|
||||
.contains("private MyVersion").contains("PROJECT = \"My App\"");
|
||||
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")
|
||||
|
@ -100,19 +155,107 @@ class GeneratedVersionTest {
|
|||
}
|
||||
|
||||
@Test
|
||||
void testWriteTemplate() throws IOException {
|
||||
var gv = new GeneratedVersion();
|
||||
gv.setProject(PROJECT);
|
||||
var t = GeneratedVersionOperation.buildTemplate(gv);
|
||||
void testDirectories() {
|
||||
var foo = new File("foo");
|
||||
var bar = new File("bar");
|
||||
|
||||
var tmpDir = Files.createTempDirectory("bldGeneratedVersion").toFile();
|
||||
var op = new GeneratedVersionOperation().directory(foo);
|
||||
assertThat(op.generatedVersion().getDirectory()).as("as file").isEqualTo(foo);
|
||||
|
||||
GeneratedVersionOperation.writeTemplate(t, tmpDir, gv);
|
||||
op = op.directory(bar.toPath());
|
||||
assertThat(op.generatedVersion().getDirectory()).as("as path").isEqualTo(bar);
|
||||
|
||||
assertThat(gv.getClassFile()).exists();
|
||||
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 = 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