Compare commits
79 commits
Author | SHA1 | Date | |
---|---|---|---|
6bec436b11 | |||
fc8304ccde | |||
36aa281834 | |||
b74d366255 | |||
5bac33d622 | |||
a38a51c68f | |||
1058f7719e | |||
4ac16ecaa4 | |||
a4c47eee81 | |||
00df6edbc2 | |||
e67cb22884 | |||
11970069df | |||
86d113fe31 | |||
548612df7b | |||
5316279412 | |||
1a2ea9edb0 | |||
5a99244158 | |||
f1bff720e0 | |||
ffee594e32 | |||
11ff9c0afc | |||
0b1fc2e3d9 | |||
6f0e912bcb | |||
0d60e91f11 | |||
98dbf61eb1 | |||
f8db36b235 | |||
ffb8a706d3 | |||
040a4681e5 | |||
a3217e271b | |||
5ad38d14ec | |||
772bc63bb2 | |||
2962797f94 | |||
c232d50d8f | |||
08c527f6e6 | |||
ff9a62eccd | |||
3f6ab7383f | |||
c77118a6eb | |||
4eed926a06 | |||
cf558ef357 | |||
25c0a63ee6 | |||
c3562c3275 | |||
c208b68226 | |||
7ad2b23b2e | |||
e711e405aa | |||
d98a140f96 | |||
a2ed825042 | |||
eb4699d84b | |||
f340aed106 | |||
7b6e75d44c | |||
1ac52e6ed1 | |||
b3bdb2d282 | |||
61a40e0c7d | |||
ce4a081bf1 | |||
17a21bb436 | |||
439fb2571f | |||
457cefdbf5 | |||
0e5d89b796 | |||
bae5ea465d | |||
a6c6a0bf34 | |||
548fa95b79 | |||
fab86c0245 | |||
cbafe96064 | |||
859a1e73a2 | |||
3a08a9d845 | |||
16f45fad1a | |||
5d7bc7d15c | |||
76b50ae684 | |||
f8b84a988b | |||
1ca4d5b56a | |||
dcbfe4a7e2 | |||
|
53a20d876b | ||
82bfc15521 | |||
b9d7c9edf9 | |||
6640c19931 | |||
5f91af718f | |||
5566546d38 | |||
5a8c37b687 | |||
69ed2b9a5c | |||
36c6d18fd3 | |||
797e290904 |
32 changed files with 617 additions and 242 deletions
44
.github/workflows/bld.yml
vendored
44
.github/workflows/bld.yml
vendored
|
@ -4,36 +4,44 @@ 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: Download the examples dependencies
|
||||
run: |
|
||||
cd examples
|
||||
chmod +x bld
|
||||
./bld download
|
||||
cd ..
|
||||
|
||||
- name: Run tests with bld
|
||||
- name: Run tests [examples]
|
||||
working-directory: examples
|
||||
run: ./bld compile test
|
||||
|
||||
- name: Compile and create the JAR [examples]
|
||||
working-directory: examples
|
||||
run: ./bld compile bootjar
|
||||
|
||||
- name: Compile and create the WAR [examples]
|
||||
working-directory: examples
|
||||
run: ./bld compile bootwar
|
||||
|
||||
- name: Download dependencies
|
||||
run: ./bld download
|
||||
|
||||
- name: Run tests
|
||||
run: ./bld compile test
|
14
.github/workflows/pages.yml
vendored
14
.github/workflows/pages.yml
vendored
|
@ -3,7 +3,7 @@ name: javadocs-pages
|
|||
on:
|
||||
# Runs on pushes targeting the default branch
|
||||
push:
|
||||
branches: ["main"]
|
||||
branches: [ "main" ]
|
||||
|
||||
# Allows you to run this workflow manually from the Actions tab
|
||||
workflow_dispatch:
|
||||
|
@ -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.8.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.8.0.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.bld/dist/bld-2.2.1.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>
|
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.BootJarOperationTest"
|
||||
"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/dist/bld-1.8.0.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
|
@ -2,18 +2,26 @@
|
|||
|
||||
[](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-spring-boot)
|
||||
[](https://repo.rife2.com/#/snapshots/com/uwyn/rife2/bld-spring-boot)
|
||||
[](https://github.com/rife2/bld-spring-boot/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-spring-boot=com.uwyn.rife2:bld-spring-boot
|
||||
```
|
||||
|
||||
For more information, please refer to the [extensions](https://github.com/rife2/bld/wiki/Extensions) documentation.
|
||||
|
||||
## Create an Executable JAR
|
||||
|
||||
To create a [Spring Boot executable Java Archive](https://docs.spring.io/spring-boot/docs/current/reference/html/executable-jar.html)
|
||||
(JAR) from the current project:
|
||||
|
||||
```java
|
||||
@@BuildCommand(summary = "Creates an executable JAR for the project")
|
||||
@BuildCommand(summary = "Creates an executable JAR for the project")
|
||||
public void bootjar() throws Exception {
|
||||
new BootJarOperation()
|
||||
.fromProject(this)
|
||||
|
@ -27,6 +35,8 @@ public void bootjar() throws Exception {
|
|||
|
||||
- [View Examples Project](https://github.com/rife2/bld-spring-boot/tree/main/examples)
|
||||
|
||||
## Create an Executable WAR
|
||||
|
||||
To create a [Spring Boot executable Web Archive](https://docs.spring.io/spring-boot/docs/current/reference/html/executable-jar.html#appendix.executable-jar.nested-jars.war-structure)
|
||||
(WAR) from the current project:
|
||||
|
||||
|
@ -45,11 +55,13 @@ public void bootwar() throws Exception {
|
|||
|
||||
- [View Examples Project](https://github.com/rife2/bld-spring-boot/tree/main/examples)
|
||||
|
||||
## Required Dependency
|
||||
|
||||
Don't forget to include the _Spring Boot Loader_ dependency to your project:
|
||||
|
||||
```java
|
||||
scope(standalone)
|
||||
.include(dependency("org.springframeworkboot:spring-boot-loader:3.2.2"));
|
||||
.include(dependency("org.springframework.boot:spring-boot-loader:3.4.4"));
|
||||
```
|
||||
|
||||
Please check the [BootJarOperation documentation](https://rife2.github.io/bld-spring-boot/rife/bld/extension/BootJarOperation.html#method-summary)
|
||||
|
|
|
@ -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">
|
||||
|
@ -19,12 +19,13 @@
|
|||
</properties>
|
||||
</rule>
|
||||
|
||||
|
||||
<!-- CODE STYLE -->
|
||||
<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="LocalVariableNamingConventions"/>
|
||||
|
@ -35,8 +36,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 +54,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 +107,4 @@
|
|||
<!-- SECURITY -->
|
||||
<rule ref="category/java/security.xml">
|
||||
</rule>
|
||||
</ruleset>
|
||||
</ruleset>
|
||||
|
|
6
examples/.idea/bld.xml
generated
Normal file
6
examples/.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
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.8.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.8.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>
|
9
examples/.vscode/launch.json
vendored
9
examples/.vscode/launch.json
vendored
|
@ -5,7 +5,14 @@
|
|||
"type": "java",
|
||||
"name": "Run Tests",
|
||||
"request": "launch",
|
||||
"mainClass": "com.example.demo.DemoApplicationTest"
|
||||
"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"]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
13
examples/.vscode/settings.json
vendored
13
examples/.vscode/settings.json
vendored
|
@ -3,13 +3,14 @@
|
|||
"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/dist/bld-1.8.0.jar",
|
||||
"lib/compile/*.jar",
|
||||
"lib/runtime/*.jar",
|
||||
"lib/test/*.jar"
|
||||
]
|
||||
"${HOME}/.bld/dist/bld-2.2.1.jar",
|
||||
"lib/**/*.jar"
|
||||
],
|
||||
"java.compile.nullAnalysis.mode": "automatic"
|
||||
}
|
||||
|
|
Binary file not shown.
|
@ -1,7 +1,7 @@
|
|||
bld.downloadExtensionJavadoc=false
|
||||
bld.downloadExtensionSources=true
|
||||
bld.extensions=com.uwyn.rife2:bld-spring-boot:0.9.0
|
||||
bld.repositories=MAVEN_LOCAL,MAVEN_CENTRAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES
|
||||
bld.downloadLocation=
|
||||
bld.extension-boot=com.uwyn.rife2:bld-spring-boot:1.0.3
|
||||
bld.repositories=MAVEN_LOCAL,MAVEN_CENTRAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES
|
||||
bld.sourceDirectories=
|
||||
bld.version=1.8.0
|
||||
bld.version=2.2.1
|
||||
|
|
|
@ -26,16 +26,21 @@ public class DemoApplicationBuild extends WebProject {
|
|||
|
||||
repositories = List.of(MAVEN_CENTRAL);
|
||||
|
||||
var boot = version(3, 4, 5);
|
||||
scope(compile)
|
||||
.include(dependency("org.springframework.boot:spring-boot-starter:3.2.2"))
|
||||
.include(dependency("org.springframework.boot:spring-boot-starter-actuator:3.2.2"))
|
||||
.include(dependency("org.springframework.boot:spring-boot-starter-web:3.2.2"));
|
||||
.include(dependency("org.springframework.boot", "spring-boot-starter", boot))
|
||||
.include(dependency("org.springframework.boot", "spring-boot-starter-actuator", boot))
|
||||
.include(dependency("org.springframework.boot", "spring-boot-starter-web", boot))
|
||||
.include(dependency("org.mockito:mockito-core:5.17.0"));
|
||||
scope(test)
|
||||
.include(dependency("org.springframework.boot:spring-boot-starter-test:3.2.2"))
|
||||
.include(dependency("org.junit.jupiter:junit-jupiter:5.10.1"))
|
||||
.include(dependency("org.junit.platform:junit-platform-console-standalone:1.10.1"));
|
||||
.include(dependency("org.springframework.boot", "spring-boot-starter-test", boot))
|
||||
.include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 12, 2)))
|
||||
.include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 12, 2)));
|
||||
scope(standalone)
|
||||
.include(dependency("org.springframework.boot:spring-boot-loader:3.2.2"));
|
||||
.include(dependency("org.springframework.boot", "spring-boot-loader", boot));
|
||||
|
||||
testOperation().javaOptions(List.of("-XX:+EnableDynamicAgentLoading"))
|
||||
.javaOptions().enableNativeAccess("ALL-UNNAMED");
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
@ -63,4 +68,4 @@ public class DemoApplicationBuild extends WebProject {
|
|||
.fromProject(this)
|
||||
.execute();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Binary file not shown.
|
@ -1,7 +1,7 @@
|
|||
bld.downloadExtensionJavadoc=false
|
||||
bld.downloadExtensionSources=true
|
||||
bld.extension-pmd=com.uwyn.rife2:bld-pmd:0.9.5
|
||||
bld.repositories=MAVEN_LOCAL,MAVEN_CENTRAL,RIFE2_RELEASES
|
||||
bld.downloadLocation=
|
||||
bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.2.2
|
||||
bld.repositories=MAVEN_CENTRAL,MAVEN_LOCAL,RIFE2_RELEASES
|
||||
bld.sourceDirectories=
|
||||
bld.version=1.8.0
|
||||
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.
|
||||
|
@ -33,20 +33,21 @@ public class SpringBootBuild extends Project {
|
|||
public SpringBootBuild() {
|
||||
pkg = "rife.bld.extension";
|
||||
name = "bld-spring-boot";
|
||||
version = version(0, 9, 0);
|
||||
version = version(1, 0, 4, "SNAPSHOT");
|
||||
|
||||
javaRelease = 17;
|
||||
|
||||
downloadSources = true;
|
||||
autoDownloadPurge = true;
|
||||
|
||||
repositories = List.of(MAVEN_LOCAL, MAVEN_CENTRAL, RIFE2_RELEASES, RIFE2_SNAPSHOTS);
|
||||
|
||||
scope(compile)
|
||||
.include(dependency("com.uwyn.rife2", "bld", version(1, 8, 0, "SNAPSHOT")));
|
||||
.include(dependency("com.uwyn.rife2", "bld", version(2, 2, 1)));
|
||||
scope(test)
|
||||
.include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 10, 1)))
|
||||
.include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 10, 1)))
|
||||
.include(dependency("org.assertj", "assertj-core", version(3, 25, 2)));
|
||||
.include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 12, 2)))
|
||||
.include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 12, 2)))
|
||||
.include(dependency("org.assertj", "assertj-core", version(3, 27, 3)));
|
||||
|
||||
javadocOperation()
|
||||
.javadocOptions()
|
||||
|
@ -56,28 +57,26 @@ public class SpringBootBuild extends Project {
|
|||
|
||||
publishOperation()
|
||||
.repository(version.isSnapshot() ? repository("rife2-snapshot") : repository("rife2"))
|
||||
.repository(repository("github"))
|
||||
.info()
|
||||
.groupId("com.uwyn.rife2")
|
||||
.artifactId("bld-spring-boot")
|
||||
.description("bld Extension for Spring Boot")
|
||||
.url("https://github.com/rife2/bld-spring-boot")
|
||||
.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/bld-spring-boot.git")
|
||||
.developerConnection("scm:git:git@github.com:rife2/bld-spring-boot.git")
|
||||
.url("https://github.com/rife2/bld-spring-boot")
|
||||
.scm(new PublishScm()
|
||||
.connection("scm:git:https://github.com/rife2/bld-spring-boot.git")
|
||||
.developerConnection("scm:git:git@github.com:rife2/bld-spring-boot.git")
|
||||
.url("https://github.com/rife2/bld-spring-boot")
|
||||
)
|
||||
.signKey(property("sign.key"))
|
||||
.signPassphrase(property("sign.passphrase"));
|
||||
|
@ -88,7 +87,7 @@ public class SpringBootBuild extends Project {
|
|||
}
|
||||
|
||||
@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.
|
||||
|
@ -18,6 +18,7 @@ package rife.bld.extension;
|
|||
|
||||
import rife.bld.Project;
|
||||
import rife.bld.operations.AbstractOperation;
|
||||
import rife.bld.operations.exceptions.ExitStatusException;
|
||||
import rife.tools.FileUtils;
|
||||
import rife.tools.exceptions.FileUtilsErrorException;
|
||||
|
||||
|
@ -26,10 +27,13 @@ import java.io.IOException;
|
|||
import java.io.PrintWriter;
|
||||
import java.io.StringWriter;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.text.MessageFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.spi.ToolProvider;
|
||||
|
@ -45,10 +49,10 @@ import java.util.spi.ToolProvider;
|
|||
public abstract class AbstractBootOperation<T extends AbstractBootOperation<T>>
|
||||
extends AbstractOperation<AbstractBootOperation<T>> {
|
||||
private static final Logger LOGGER = Logger.getLogger(AbstractBootOperation.class.getName());
|
||||
private final List<File> infLibs_ = new ArrayList<>();
|
||||
private final List<File> launcherLibs_ = new ArrayList<>();
|
||||
private final List<BootManifestAttribute> manifestAttributes_ = new ArrayList<>();
|
||||
private final List<File> sourceDirectories_ = new ArrayList<>();
|
||||
private final Collection<File> infLibs_ = new ArrayList<>();
|
||||
private final Collection<File> launcherLibs_ = new ArrayList<>();
|
||||
private final Map<String, String> manifestAttributes_ = new ConcurrentHashMap<>();
|
||||
private final Collection<File> sourceDirectories_ = new ArrayList<>();
|
||||
private File destinationDirectory_;
|
||||
private String destinationFileName_;
|
||||
private String launcherClass_;
|
||||
|
@ -88,6 +92,17 @@ public abstract class AbstractBootOperation<T extends AbstractBootOperation<T>>
|
|||
return destinationDirectory(new File(directory));
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides the destination directory in which the archive will be created.
|
||||
*
|
||||
* @param directory the destination directory
|
||||
* @return this operation instance
|
||||
* @throws IOException if an error occurs
|
||||
*/
|
||||
public T destinationDirectory(Path directory) throws IOException {
|
||||
return destinationDirectory(directory.toFile());
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides the file name that will be used for the archive creation.
|
||||
*
|
||||
|
@ -116,9 +131,12 @@ public abstract class AbstractBootOperation<T extends AbstractBootOperation<T>>
|
|||
* @param stagingDirectory the staging directory
|
||||
* @throws FileUtilsErrorException if an error occurs
|
||||
*/
|
||||
protected void executeCopyBootLoader(File stagingDirectory) throws FileUtilsErrorException {
|
||||
protected void executeCopyBootLoader(File stagingDirectory) throws FileUtilsErrorException, ExitStatusException {
|
||||
if (launcherLibs_.isEmpty()) {
|
||||
throw new IllegalArgumentException("Spring Boot loader launcher required.");
|
||||
if (LOGGER.isLoggable(Level.SEVERE) && !silent()) {
|
||||
LOGGER.severe("Spring Boot loader launcher required.");
|
||||
}
|
||||
throw new ExitStatusException(ExitStatusException.EXIT_FAILURE);
|
||||
} else {
|
||||
var meta_inf_dir = new File(stagingDirectory, "META-INF");
|
||||
for (var jar : launcherLibs()) {
|
||||
|
@ -127,7 +145,7 @@ public abstract class AbstractBootOperation<T extends AbstractBootOperation<T>>
|
|||
if (meta_inf_dir.exists()) {
|
||||
FileUtils.deleteDirectory(meta_inf_dir);
|
||||
}
|
||||
} else if (LOGGER.isLoggable(Level.WARNING)) {
|
||||
} else if (LOGGER.isLoggable(Level.WARNING) && !silent()) {
|
||||
LOGGER.warning("File not found: " + jar.getAbsolutePath());
|
||||
}
|
||||
}
|
||||
|
@ -144,15 +162,13 @@ public abstract class AbstractBootOperation<T extends AbstractBootOperation<T>>
|
|||
var inf_classes_dir = new File(stagingInfDirectory, "classes");
|
||||
BootUtils.mkDirs(inf_classes_dir);
|
||||
|
||||
for (var dir : sourceDirectories()) {
|
||||
for (var dir : sourceDirectories_) {
|
||||
if (dir.exists()) {
|
||||
FileUtils.copyDirectory(dir, inf_classes_dir);
|
||||
} else if (LOGGER.isLoggable(Level.WARNING)) {
|
||||
} else if (LOGGER.isLoggable(Level.WARNING) && !silent()) {
|
||||
LOGGER.warning("Directory not found: " + dir.getAbsolutePath());
|
||||
}
|
||||
}
|
||||
|
||||
BootUtils.deleteDirectories(new File(inf_classes_dir, "resources"), new File(inf_classes_dir, "templates"));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -168,7 +184,7 @@ public abstract class AbstractBootOperation<T extends AbstractBootOperation<T>>
|
|||
for (var jar : infLibs_) {
|
||||
if (jar.exists()) {
|
||||
Files.copy(jar.toPath(), inf_lib_dir.toPath().resolve(jar.getName()));
|
||||
} else if (LOGGER.isLoggable(Level.WARNING)) {
|
||||
} else if (LOGGER.isLoggable(Level.WARNING) && !silent()) {
|
||||
LOGGER.warning("File not found: " + jar.getAbsolutePath());
|
||||
}
|
||||
}
|
||||
|
@ -203,7 +219,7 @@ public abstract class AbstractBootOperation<T extends AbstractBootOperation<T>>
|
|||
var jarTool = ToolProvider.findFirst("jar").orElseThrow();
|
||||
|
||||
String args;
|
||||
if (LOGGER.isLoggable(Level.FINER)) {
|
||||
if (LOGGER.isLoggable(Level.FINER) && !silent()) {
|
||||
args = "-0cMvf";
|
||||
} else {
|
||||
args = "-0cMf";
|
||||
|
@ -239,8 +255,8 @@ public abstract class AbstractBootOperation<T extends AbstractBootOperation<T>>
|
|||
var manifest = new File(meta_inf_dir, "MANIFEST.MF").toPath();
|
||||
|
||||
try (var fileWriter = Files.newBufferedWriter(manifest)) {
|
||||
for (var manifestAttribute : manifestAttributes()) {
|
||||
fileWriter.write(manifestAttribute.name() + ": " + manifestAttribute.value() + System.lineSeparator());
|
||||
for (var set : manifestAttributes_.entrySet()) {
|
||||
fileWriter.write(set.getKey() + ": " + set.getValue() + System.lineSeparator());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -259,6 +275,7 @@ public abstract class AbstractBootOperation<T extends AbstractBootOperation<T>>
|
|||
*
|
||||
* @param jars a collection of Java archive files
|
||||
* @return this operation instance
|
||||
* @see #infLibs(File...)
|
||||
*/
|
||||
public T infLibs(Collection<File> jars) {
|
||||
infLibs_.addAll(jars);
|
||||
|
@ -271,22 +288,65 @@ public abstract class AbstractBootOperation<T extends AbstractBootOperation<T>>
|
|||
*
|
||||
* @param jars one or more Java archive files
|
||||
* @return this operation instance
|
||||
* @see #infLibs(Collection)
|
||||
*/
|
||||
public T infLibs(File... jars) {
|
||||
infLibs_.addAll(List.of(jars));
|
||||
//noinspection unchecked
|
||||
return (T) this;
|
||||
return infLibs(List.of(jars));
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides the libraries that will be stored in {@code BOOT-INF} or {@code WEB-INF}.
|
||||
*
|
||||
* @param jars one or more Java archive files
|
||||
* @return this operation instance
|
||||
* @see #infLibsPaths(Collection)
|
||||
*/
|
||||
public T infLibs(Path... jars) {
|
||||
return infLibsPaths(List.of(jars));
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides the libraries that will be stored in {@code BOOT-INF} or {@code WEB-INF}.
|
||||
*
|
||||
* @param jars one or more Java archive files
|
||||
* @return this operation instance
|
||||
* @see #infLibsStrings(Collection)
|
||||
*/
|
||||
public T infLibs(String... jars) {
|
||||
return infLibsStrings(List.of(jars));
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the libraries in {@code BOOT-INF} or {@code WEB-INF}.
|
||||
*
|
||||
* @return a list of Java archives
|
||||
* @return the Java archives
|
||||
*/
|
||||
public List<File> infLibs() {
|
||||
public Collection<File> infLibs() {
|
||||
return infLibs_;
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides the libraries that will be stored in {@code BOOT-INF} or {@code WEB-INF}.
|
||||
*
|
||||
* @param jars one or more Java archive files
|
||||
* @return this operation instance
|
||||
* @see #infLibs(Path...)
|
||||
*/
|
||||
public T infLibsPaths(Collection<Path> jars) {
|
||||
return infLibs(jars.stream().map(Path::toFile).toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides the libraries that will be stored in {@code BOOT-INF} or {@code WEB-INF}.
|
||||
*
|
||||
* @param jars one or more Java archive files
|
||||
* @return this operation instance
|
||||
* @see #infLibs(String...)
|
||||
*/
|
||||
public T infLibsStrings(Collection<String> jars) {
|
||||
return infLibs(jars.stream().map(File::new).toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides the Spring Boot loader launcher fully-qualified class name.
|
||||
* <p>
|
||||
|
@ -321,9 +381,9 @@ public abstract class AbstractBootOperation<T extends AbstractBootOperation<T>>
|
|||
/**
|
||||
* Retrieves the Spring Boot loader launcher libraries.
|
||||
*
|
||||
* @return a list of Java archives
|
||||
* @return the Java archives
|
||||
*/
|
||||
public List<File> launcherLibs() {
|
||||
public Collection<File> launcherLibs() {
|
||||
return launcherLibs_;
|
||||
}
|
||||
|
||||
|
@ -332,22 +392,81 @@ public abstract class AbstractBootOperation<T extends AbstractBootOperation<T>>
|
|||
*
|
||||
* @param jars a collection of Java archives
|
||||
* @return this operation instance
|
||||
* @throws IOException if an error occurs
|
||||
* @throws IOException if a JAR could not be found
|
||||
* @see #infLibs(File...)
|
||||
*/
|
||||
public T launcherLibs(Collection<File> jars) throws IOException {
|
||||
if (!jars.isEmpty()) {
|
||||
for (var j : jars) {
|
||||
if (j.exists()) {
|
||||
launcherLibs_.add(j);
|
||||
} else {
|
||||
throw new IOException("Spring Boot loader launcher library not found: " + j);
|
||||
}
|
||||
for (var j : jars) {
|
||||
if (j.exists()) {
|
||||
launcherLibs_.add(j);
|
||||
} else {
|
||||
throw new IOException("Spring Boot loader launcher library not found: " + j);
|
||||
}
|
||||
}
|
||||
//noinspection unchecked
|
||||
return (T) this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides the libraries for the Spring Boot loader launcher.
|
||||
*
|
||||
* @param jars one or more Java archives
|
||||
* @return this operation instance
|
||||
* @throws IOException if a JAR could not be found
|
||||
* @see #infLibs(Collection)
|
||||
*/
|
||||
public T launcherLibs(File... jars) throws IOException {
|
||||
return launcherLibs(List.of(jars));
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides the libraries for the Spring Boot loader launcher.
|
||||
*
|
||||
* @param jars one or more Java archives
|
||||
* @return this operation instance
|
||||
* @throws IOException if a JAR could not be found
|
||||
* @see #launcherLibsStrings(Collection)
|
||||
*/
|
||||
public T launcherLibs(String... jars) throws IOException {
|
||||
return launcherLibsStrings(List.of(jars));
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides the libraries for the Spring Boot loader launcher.
|
||||
*
|
||||
* @param jars one or more Java archives
|
||||
* @return this operation instance
|
||||
* @throws IOException if a JAR could not be found
|
||||
* @see #launcherLibsPaths(Collection)
|
||||
*/
|
||||
public T launcherLibs(Path... jars) throws IOException {
|
||||
return launcherLibsPaths(List.of(jars));
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides the libraries for the Spring Boot loader launcher.
|
||||
*
|
||||
* @param jars one or more Java archives
|
||||
* @return this operation instance
|
||||
* @throws IOException if a JAR could not be found
|
||||
* @see #launcherLibs(Path...)
|
||||
*/
|
||||
public T launcherLibsPaths(Collection<Path> jars) throws IOException {
|
||||
return launcherLibs(jars.stream().map(Path::toFile).toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides the libraries for the Spring Boot loader launcher.
|
||||
*
|
||||
* @param jars one or more Java archives
|
||||
* @return this operation instance
|
||||
* @throws IOException if a JAR could not be found
|
||||
* @see #launcherLibs(String...)
|
||||
*/
|
||||
public T launcherLibsStrings(Collection<String> jars) throws IOException {
|
||||
return launcherLibs(jars.stream().map(File::new).toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides the fully-qualified main class name.
|
||||
*
|
||||
|
@ -377,17 +496,17 @@ public abstract class AbstractBootOperation<T extends AbstractBootOperation<T>>
|
|||
* @return this operation instance
|
||||
*/
|
||||
public T manifestAttribute(String name, String value) {
|
||||
manifestAttributes_.add(new BootManifestAttribute(name, value));
|
||||
manifestAttributes_.put(name, value);
|
||||
//noinspection unchecked
|
||||
return (T) this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the list of attributes that will be put in the archive manifest.
|
||||
* Retrieves the attributes that will be put in the archive manifest.
|
||||
*
|
||||
* @return a list of manifest attributes
|
||||
* @return the manifest attributes
|
||||
*/
|
||||
public List<BootManifestAttribute> manifestAttributes() {
|
||||
public Map<String, String> manifestAttributes() {
|
||||
return manifestAttributes_;
|
||||
}
|
||||
|
||||
|
@ -396,9 +515,10 @@ public abstract class AbstractBootOperation<T extends AbstractBootOperation<T>>
|
|||
*
|
||||
* @param attributes the manifest attributes
|
||||
* @return this operation instance
|
||||
* @see #manifestAttribute(String, String)
|
||||
*/
|
||||
public T manifestAttributes(Collection<BootManifestAttribute> attributes) {
|
||||
manifestAttributes_.addAll(attributes);
|
||||
public T manifestAttributes(Map<String, String> attributes) {
|
||||
manifestAttributes_.putAll(attributes);
|
||||
//noinspection unchecked
|
||||
return (T) this;
|
||||
}
|
||||
|
@ -408,22 +528,78 @@ public abstract class AbstractBootOperation<T extends AbstractBootOperation<T>>
|
|||
*
|
||||
* @param directories one or more source directories
|
||||
* @return this operation instance
|
||||
* @see #sourceDirectories(File...)
|
||||
*/
|
||||
public T sourceDirectories(File... directories) {
|
||||
sourceDirectories_.addAll(List.of(directories));
|
||||
public T sourceDirectories(Collection<File> directories) {
|
||||
sourceDirectories_.addAll(directories);
|
||||
//noinspection unchecked
|
||||
return (T) this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides source directories that will be used for the archive creation.
|
||||
*
|
||||
* @param directories one or more source directories
|
||||
* @return this operation instance
|
||||
* @see #sourceDirectories(Collection)
|
||||
*/
|
||||
public T sourceDirectories(File... directories) {
|
||||
return sourceDirectories(List.of(directories));
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides source directories that will be used for the archive creation.
|
||||
*
|
||||
* @param directories one or more source directories
|
||||
* @return this operation instance
|
||||
* @see #sourceDirectoriesStrings(Collection)
|
||||
*/
|
||||
public T sourceDirectories(String... directories) {
|
||||
return sourceDirectoriesStrings(List.of(directories));
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides source directories that will be used for the archive creation.
|
||||
*
|
||||
* @param directories one or more source directories
|
||||
* @return this operation instance
|
||||
* @see #sourceDirectoriesPaths(Collection)
|
||||
*/
|
||||
public T sourceDirectories(Path... directories) {
|
||||
return sourceDirectoriesPaths(List.of(directories));
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the source directories that will be used for the archive creation.
|
||||
*
|
||||
* @return a list of directories
|
||||
* @return the source directories
|
||||
*/
|
||||
public List<File> sourceDirectories() {
|
||||
public Collection<File> sourceDirectories() {
|
||||
return sourceDirectories_;
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides source directories that will be used for the archive creation.
|
||||
*
|
||||
* @param directories one or more source directories
|
||||
* @return this operation instance
|
||||
* @see #sourceDirectories(Path...)
|
||||
*/
|
||||
public T sourceDirectoriesPaths(Collection<Path> directories) {
|
||||
return sourceDirectories(directories.stream().map(Path::toFile).toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides source directories that will be used for the archive creation.
|
||||
*
|
||||
* @param directories one or more source directories
|
||||
* @return this operation instance
|
||||
* @see #sourceDirectories(String...)
|
||||
*/
|
||||
public T sourceDirectoriesStrings(Collection<String> directories) {
|
||||
return sourceDirectories(directories.stream().map(File::new).toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* Verifies that all the elements ({@link #mainClass() mainClass}, {@link #launcherClass() launcherClass} and
|
||||
* {@link #launcherLibs() launcherLibs}) required to create the archive have been provided, throws an
|
||||
|
|
|
@ -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.
|
||||
|
@ -23,7 +23,7 @@ import java.io.File;
|
|||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
|
@ -89,7 +89,7 @@ public class BootJarOperation extends AbstractBootOperation<BootJarOperation> {
|
|||
* {@link Project#standaloneClasspathJars() standaloneClasspathJars}</li>
|
||||
* <li>The {@link #mainClass(String) main class} to {@link Project#mainClass() mainClass}</li>
|
||||
* <li>The {@code Manifest-Version}, {@code Main-Class} and {@code Start-Class}
|
||||
* {@link #manifestAttributes(Collection) manifest attributes}</li>
|
||||
* {@link #manifestAttributes() manifest attributes}</li>
|
||||
* <li>The {@link #sourceDirectories(File...) source directories} to
|
||||
* {@link Project#buildMainDirectory() buildMainDirectory} and
|
||||
* {@link Project#srcMainResourcesDirectory() srcMainResourcesDirectory}</li>
|
||||
|
@ -107,11 +107,10 @@ public class BootJarOperation extends AbstractBootOperation<BootJarOperation> {
|
|||
.launcherClass(BootUtils.launcherClass(project, "JarLauncher"))
|
||||
.launcherLibs(project.standaloneClasspathJars())
|
||||
.mainClass(project.mainClass())
|
||||
.manifestAttributes(List.of(
|
||||
new BootManifestAttribute("Manifest-Version", "1.0"),
|
||||
new BootManifestAttribute("Main-Class", launcherClass()),
|
||||
new BootManifestAttribute("Start-Class", mainClass())
|
||||
))
|
||||
.manifestAttributes(Map.of(
|
||||
"Manifest-Version", "1.0",
|
||||
"Main-Class", launcherClass(),
|
||||
"Start-Class", mainClass()))
|
||||
.sourceDirectories(project.buildMainDirectory(), project.srcMainResourcesDirectory());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,28 +0,0 @@
|
|||
/*
|
||||
* Copyright 2023-2024 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;
|
||||
|
||||
/**
|
||||
* Constructs a new manifest attribute.
|
||||
*
|
||||
* @param name The attribute name
|
||||
* @param value The attribute value
|
||||
* @author <a href="https://erik.thauvin.net/">Erik C. Thauvin</a>
|
||||
* @since 1.0
|
||||
*/
|
||||
public record BootManifestAttribute(String name, String value) {
|
||||
}
|
|
@ -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,6 @@
|
|||
package rife.bld.extension;
|
||||
|
||||
import rife.bld.Project;
|
||||
import rife.tools.FileUtils;
|
||||
import rife.tools.exceptions.FileUtilsErrorException;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
@ -38,20 +36,6 @@ public final class BootUtils {
|
|||
// no-op
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes the given directories.
|
||||
*
|
||||
* @param directories one or more directories to delete
|
||||
* @throws FileUtilsErrorException if an error occurs
|
||||
*/
|
||||
public static void deleteDirectories(File... directories) throws FileUtilsErrorException {
|
||||
for (var d : directories) {
|
||||
if (d.exists()) {
|
||||
FileUtils.deleteDirectory(d);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the given file size in bytes, kilobytes, megabytes, gigabytes or terabytes.
|
||||
*
|
||||
|
|
|
@ -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,9 +22,11 @@ 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.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
|
@ -112,7 +114,7 @@ public class BootWarOperation extends AbstractBootOperation<BootWarOperation> {
|
|||
* {@link Project#standaloneClasspathJars() standaloneClasspathJars}</li>
|
||||
* <li>The {@link #mainClass(String) main class} to {@link Project#mainClass() mainClass}</li>
|
||||
* <li>The {@code Manifest-Version}, {@code Main-Class} and {@code Start-Class}
|
||||
* {@link #manifestAttributes(Collection) manifest attributes}</li>
|
||||
* {@link #manifestAttributes() manifest attributes}</li>
|
||||
* <li>The {@link #sourceDirectories(File...) source directories} to
|
||||
* {@link Project#buildMainDirectory() buildMainDirectory} and
|
||||
* {@link Project#srcMainResourcesDirectory() srcMainResourcesDirectory}</li>
|
||||
|
@ -131,19 +133,20 @@ public class BootWarOperation extends AbstractBootOperation<BootWarOperation> {
|
|||
.launcherClass(BootUtils.launcherClass(project, "WarLauncher"))
|
||||
.launcherLibs(project.standaloneClasspathJars())
|
||||
.mainClass(project.mainClass())
|
||||
.manifestAttributes(List.of(
|
||||
new BootManifestAttribute("Manifest-Version", "1.0"),
|
||||
new BootManifestAttribute("Main-Class", launcherClass()),
|
||||
new BootManifestAttribute("Start-Class", mainClass())
|
||||
))
|
||||
.manifestAttributes(Map.of(
|
||||
"Manifest-Version", "1.0",
|
||||
"Main-Class", launcherClass(),
|
||||
"Start-Class", mainClass()))
|
||||
.providedLibs(project.providedClasspathJars())
|
||||
.sourceDirectories(project.buildMainDirectory(), project.srcMainResourcesDirectory());
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides libraries that will be used for the WAR creation in {@code /WEB-INF/lib-provided}.
|
||||
*
|
||||
* @param jars a collection of Java archive files
|
||||
* @return this operation instance
|
||||
* @see #providedLibs(File...)
|
||||
*/
|
||||
public BootWarOperation providedLibs(Collection<File> jars) {
|
||||
providedLibs_.addAll(jars);
|
||||
|
@ -155,9 +158,62 @@ public class BootWarOperation extends AbstractBootOperation<BootWarOperation> {
|
|||
*
|
||||
* @param jars one or more Java archive files
|
||||
* @return this operation instance
|
||||
* @see #providedLibsStrings(Collection)
|
||||
*/
|
||||
public BootWarOperation providedLibs(String... jars) {
|
||||
return providedLibsStrings(List.of(jars));
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides the libraries that will be used for the WAR creation in {@code /WEB-INF/lib-provided}.
|
||||
*
|
||||
* @param jars one or more Java archive files
|
||||
* @return this operation instance
|
||||
* @see #providedLibs(Collection)
|
||||
*/
|
||||
public BootWarOperation providedLibs(File... jars) {
|
||||
providedLibs_.addAll(List.of(jars));
|
||||
return this;
|
||||
return providedLibs(List.of(jars));
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides the libraries that will be used for the WAR creation in {@code /WEB-INF/lib-provided}.
|
||||
*
|
||||
* @param jars one or more Java archive files
|
||||
* @return this operation instance
|
||||
* @see #providedLibsPaths(Collection)
|
||||
*/
|
||||
public BootWarOperation providedLibs(Path... jars) {
|
||||
return providedLibsPaths(List.of(jars));
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the libraries that will be used for the WAR creation in {@code /WEB-INF/lib-provided}.
|
||||
*
|
||||
* @return the list of Java archive files.
|
||||
*/
|
||||
public List<File> providedLibs() {
|
||||
return providedLibs_;
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides the libraries that will be used for the WAR creation in {@code /WEB-INF/lib-provided}.
|
||||
*
|
||||
* @param jars one or more Java archive files
|
||||
* @return this operation instance
|
||||
* @see #providedLibs(Path...)
|
||||
*/
|
||||
public BootWarOperation providedLibsPaths(Collection<Path> jars) {
|
||||
return providedLibs(jars.stream().map(Path::toFile).toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides the libraries that will be used for the WAR creation in {@code /WEB-INF/lib-provided}.
|
||||
*
|
||||
* @param jars one or more Java archive files
|
||||
* @return this operation instance
|
||||
* @see #providedLibs(String...)
|
||||
*/
|
||||
public BootWarOperation providedLibsStrings(Collection<String> jars) {
|
||||
return providedLibs(jars.stream().map(File::new).toList());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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,6 +16,7 @@
|
|||
|
||||
package rife.bld.extension;
|
||||
|
||||
import org.assertj.core.api.AutoCloseableSoftAssertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import rife.bld.Project;
|
||||
import rife.bld.dependencies.VersionNumber;
|
||||
|
@ -34,7 +35,8 @@ import static org.assertj.core.api.Assertions.assertThat;
|
|||
import static org.assertj.core.api.Assertions.assertThatCode;
|
||||
|
||||
class BootJarOperationTest {
|
||||
private static final String BLD = "bld-1.8.0-20240107.042858-1.jar";
|
||||
private static final String BLD = "bld-2.2.1.jar";
|
||||
private static final String BOOT_VERSION = "3.4.5";
|
||||
private static final String EXAMPLES_LIB_COMPILE = "examples/lib/compile/";
|
||||
private static final String EXAMPLES_LIB_RUNTIME = "examples/lib/runtime/";
|
||||
private static final String EXAMPLES_LIB_STANDALONE = "examples/lib/standalone/";
|
||||
|
@ -44,6 +46,8 @@ class BootJarOperationTest {
|
|||
org/springframework/boot/
|
||||
org/springframework/boot/loader/
|
||||
org/springframework/boot/loader/jar/
|
||||
org/springframework/boot/loader/jar/JarEntriesStream$InputStreamSupplier.class
|
||||
org/springframework/boot/loader/jar/JarEntriesStream.class
|
||||
org/springframework/boot/loader/jar/ManifestInfo.class
|
||||
org/springframework/boot/loader/jar/MetaInfVersionsInfo.class
|
||||
org/springframework/boot/loader/jar/NestedJarFile$JarEntriesEnumeration.class
|
||||
|
@ -58,6 +62,7 @@ class BootJarOperationTest {
|
|||
org/springframework/boot/loader/jar/ZipInflaterInputStream.class
|
||||
org/springframework/boot/loader/jarmode/
|
||||
org/springframework/boot/loader/jarmode/JarMode.class
|
||||
org/springframework/boot/loader/jarmode/JarModeErrorException.class
|
||||
org/springframework/boot/loader/launch/
|
||||
org/springframework/boot/loader/launch/Archive$Entry.class
|
||||
org/springframework/boot/loader/launch/Archive.class
|
||||
|
@ -120,6 +125,7 @@ class BootJarOperationTest {
|
|||
org/springframework/boot/loader/nio/file/NestedFileSystem.class
|
||||
org/springframework/boot/loader/nio/file/NestedFileSystemProvider.class
|
||||
org/springframework/boot/loader/nio/file/NestedPath.class
|
||||
org/springframework/boot/loader/nio/file/UriPathEncoder.class
|
||||
org/springframework/boot/loader/ref/
|
||||
org/springframework/boot/loader/ref/Cleaner.class
|
||||
org/springframework/boot/loader/ref/DefaultCleaner.class
|
||||
|
@ -128,9 +134,10 @@ class BootJarOperationTest {
|
|||
org/springframework/boot/loader/zip/CloseableDataBlock.class
|
||||
org/springframework/boot/loader/zip/DataBlock.class
|
||||
org/springframework/boot/loader/zip/DataBlockInputStream.class
|
||||
org/springframework/boot/loader/zip/FileChannelDataBlock$ManagedFileChannel.class
|
||||
org/springframework/boot/loader/zip/FileChannelDataBlock$Tracker.class
|
||||
org/springframework/boot/loader/zip/FileChannelDataBlock.class
|
||||
org/springframework/boot/loader/zip/FileDataBlock$FileAccess.class
|
||||
org/springframework/boot/loader/zip/FileDataBlock$Tracker$1.class
|
||||
org/springframework/boot/loader/zip/FileDataBlock$Tracker.class
|
||||
org/springframework/boot/loader/zip/FileDataBlock.class
|
||||
org/springframework/boot/loader/zip/NameOffsetLookups.class
|
||||
org/springframework/boot/loader/zip/VirtualDataBlock.class
|
||||
org/springframework/boot/loader/zip/VirtualZipDataBlock$DataPart.class
|
||||
|
@ -152,9 +159,11 @@ class BootJarOperationTest {
|
|||
""";
|
||||
private static final String MAIN_CLASS = "com.example.Foo";
|
||||
private static final String PROVIDED_LIB = "LatencyUtils-2.0.3.jar";
|
||||
private static final String SPRING_BOOT = "spring-boot-3.2.2.jar";
|
||||
private static final String SPRING_BOOT_ACTUATOR = "spring-boot-actuator-3.2.2.jar";
|
||||
private static final String SPRING_BOOT_LOADER = "spring-boot-loader-3.2.2.jar";
|
||||
private static final String SPRING_BOOT = "spring-boot-" + BOOT_VERSION + ".jar";
|
||||
private static final String SPRING_BOOT_ACTUATOR = "spring-boot-actuator-" + BOOT_VERSION + ".jar";
|
||||
private static final String SPRING_BOOT_LOADER = "spring-boot-loader-" + BOOT_VERSION + ".jar";
|
||||
private static final String SRC_MAIN_JAVA = "src/main/java";
|
||||
private static final String SRC_TEST_JAVA = "src/test/java";
|
||||
|
||||
private StringBuilder readJarEntries(File jar) throws IOException {
|
||||
var jarEntries = new StringBuilder();
|
||||
|
@ -177,7 +186,13 @@ class BootJarOperationTest {
|
|||
.isInstanceOf(IllegalArgumentException.class)
|
||||
.hasMessageContaining("class required");
|
||||
|
||||
assertThatCode(() -> new BootWarOperation().launcherLibs(List.of(new File("foo"))))
|
||||
assertThatCode(() -> new BootWarOperation().launcherLibs(new File("foo")))
|
||||
.as("foo")
|
||||
.isInstanceOf(IOException.class)
|
||||
.hasMessageContaining("not found");
|
||||
|
||||
assertThatCode(() -> new BootWarOperation().launcherLibs("bar"))
|
||||
.as("bar")
|
||||
.isInstanceOf(IOException.class)
|
||||
.hasMessageContaining("not found");
|
||||
|
||||
|
@ -190,6 +205,38 @@ class BootJarOperationTest {
|
|||
assertThat(bootWar.verifyExecute()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
void testInfLibs() {
|
||||
var op = new BootWarOperation();
|
||||
|
||||
var foo = new File(EXAMPLES_LIB_COMPILE + SPRING_BOOT);
|
||||
var bar = new File(EXAMPLES_LIB_COMPILE + SPRING_BOOT_ACTUATOR);
|
||||
|
||||
op.infLibs(EXAMPLES_LIB_COMPILE + SPRING_BOOT, EXAMPLES_LIB_COMPILE + SPRING_BOOT_ACTUATOR);
|
||||
assertThat(op.infLibs()).as("String...").containsExactly(foo, bar);
|
||||
op.infLibs().clear();
|
||||
|
||||
op.infLibs(foo, bar);
|
||||
assertThat(op.infLibs()).as("File...").containsExactly(foo, bar);
|
||||
op.infLibs().clear();
|
||||
|
||||
op.infLibs(foo.toPath(), bar.toPath());
|
||||
assertThat(op.infLibs()).as("Path...").containsExactly(foo, bar);
|
||||
op.infLibs().clear();
|
||||
|
||||
op.infLibsStrings(List.of(EXAMPLES_LIB_COMPILE + SPRING_BOOT, EXAMPLES_LIB_COMPILE + SPRING_BOOT_ACTUATOR));
|
||||
assertThat(op.infLibs()).as("List(String...)").containsExactly(foo, bar);
|
||||
op.infLibs().clear();
|
||||
|
||||
op.infLibs(List.of(foo, bar));
|
||||
assertThat(op.infLibs()).as("List(File...)").containsExactly(foo, bar);
|
||||
op.infLibs().clear();
|
||||
|
||||
op.infLibsPaths(List.of(foo.toPath(), bar.toPath()));
|
||||
assertThat(op.infLibs()).as("List(Path...)").containsExactly(foo, bar);
|
||||
op.infLibs().clear();
|
||||
}
|
||||
|
||||
@Test
|
||||
@SuppressWarnings("PMD.AvoidDuplicateLiterals")
|
||||
void testJarExecute() throws Exception {
|
||||
|
@ -218,7 +265,6 @@ class BootJarOperationTest {
|
|||
"BOOT-INF/classes/rife/bld/extension/\n" +
|
||||
"BOOT-INF/classes/rife/bld/extension/AbstractBootOperation.class\n" +
|
||||
"BOOT-INF/classes/rife/bld/extension/BootJarOperation.class\n" +
|
||||
"BOOT-INF/classes/rife/bld/extension/BootManifestAttribute.class\n" +
|
||||
"BOOT-INF/classes/rife/bld/extension/BootUtils.class\n" +
|
||||
"BOOT-INF/classes/rife/bld/extension/BootWarOperation.class\n" +
|
||||
"BOOT-INF/lib/\n" +
|
||||
|
@ -236,9 +282,9 @@ class BootJarOperationTest {
|
|||
new BootJarOperation()
|
||||
.fromProject(new CustomProject(new File(".")))
|
||||
.launcherLibs(List.of(new File(EXAMPLES_LIB_STANDALONE + SPRING_BOOT_LOADER)))
|
||||
.destinationDirectory(tmp_dir)
|
||||
.infLibs(new File(EXAMPLES_LIB_COMPILE + SPRING_BOOT),
|
||||
new File(EXAMPLES_LIB_COMPILE + SPRING_BOOT_ACTUATOR))
|
||||
.destinationDirectory(tmp_dir.getAbsolutePath())
|
||||
.infLibs(new File(EXAMPLES_LIB_COMPILE + SPRING_BOOT).getAbsolutePath(),
|
||||
new File(EXAMPLES_LIB_COMPILE + SPRING_BOOT_ACTUATOR).getAbsolutePath())
|
||||
.execute();
|
||||
|
||||
var jarFile = new File(tmp_dir, "test_project-0.0.1-boot.jar");
|
||||
|
@ -253,7 +299,6 @@ class BootJarOperationTest {
|
|||
"BOOT-INF/classes/rife/bld/extension/\n" +
|
||||
"BOOT-INF/classes/rife/bld/extension/AbstractBootOperation.class\n" +
|
||||
"BOOT-INF/classes/rife/bld/extension/BootJarOperation.class\n" +
|
||||
"BOOT-INF/classes/rife/bld/extension/BootManifestAttribute.class\n" +
|
||||
"BOOT-INF/classes/rife/bld/extension/BootUtils.class\n" +
|
||||
"BOOT-INF/classes/rife/bld/extension/BootWarOperation.class\n" +
|
||||
"BOOT-INF/lib/\n" +
|
||||
|
@ -266,33 +311,95 @@ class BootJarOperationTest {
|
|||
FileUtils.deleteDirectory(tmp_dir);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testLauncherLibs() throws IOException {
|
||||
var op = new BootJarOperation();
|
||||
|
||||
var launcher = new File(EXAMPLES_LIB_STANDALONE + SPRING_BOOT_LOADER);
|
||||
op = op.launcherLibs(EXAMPLES_LIB_STANDALONE + SPRING_BOOT_LOADER);
|
||||
assertThat(op.launcherLibs()).as("String...").containsExactly(launcher);
|
||||
op.launcherLibs().clear();
|
||||
|
||||
op = op.launcherLibs(launcher);
|
||||
assertThat(op.launcherLibs()).as("File...").containsExactly(launcher);
|
||||
op.launcherLibs().clear();
|
||||
|
||||
op = op.launcherLibs(launcher.toPath());
|
||||
assertThat(op.launcherLibs()).as("Path...").containsExactly(launcher);
|
||||
op.launcherLibs().clear();
|
||||
|
||||
op = op.launcherLibsStrings(List.of(EXAMPLES_LIB_STANDALONE + SPRING_BOOT_LOADER));
|
||||
assertThat(op.launcherLibs()).as("List(String...)").containsExactly(launcher);
|
||||
op.launcherLibs().clear();
|
||||
|
||||
op = op.launcherLibs(List.of(launcher));
|
||||
assertThat(op.launcherLibs()).as("List(File...)").containsExactly(launcher);
|
||||
op.launcherLibs().clear();
|
||||
|
||||
op = op.launcherLibsPaths(List.of(launcher.toPath()));
|
||||
assertThat(op.launcherLibs()).as("List(Path...)").containsExactly(launcher);
|
||||
op.launcherLibs().clear();
|
||||
}
|
||||
|
||||
@Test
|
||||
void testProject() throws IOException {
|
||||
var tmp_dir = Files.createTempDirectory("bootprjtmp").toFile();
|
||||
var project = new CustomProject(tmp_dir);
|
||||
var bootJar = new BootJarOperation().fromProject(project);
|
||||
var bootJar = new BootJarOperation().fromProject(project).sourceDirectories(SRC_MAIN_JAVA);
|
||||
|
||||
assertThat(bootJar.mainClass()).as("mainClass").isEqualTo(MAIN_CLASS);
|
||||
assertThat(bootJar.sourceDirectories()).as("sourceDirectories.size").hasSize(2);
|
||||
assertThat(bootJar.manifestAttributes()).as("manifestAttributes.size").hasSize(3);
|
||||
assertThat(bootJar.manifestAttributes().get(0)).as("Manifest-Version")
|
||||
.isEqualTo(new BootManifestAttribute("Manifest-Version", "1.0"));
|
||||
assertThat(bootJar.manifestAttributes().get(1).value()).as("Main-Class").endsWith("JarLauncher");
|
||||
assertThat(bootJar.manifestAttributes().get(2)).as("Start-Class")
|
||||
.isEqualTo(new BootManifestAttribute("Start-Class", MAIN_CLASS));
|
||||
assertThat(bootJar.manifestAttribute("Manifest-Test", "tsst")
|
||||
.manifestAttributes()).as("Manifest-Test").hasSize(4)
|
||||
.element(3).extracting(BootManifestAttribute::name).isEqualTo("Manifest-Test");
|
||||
assertThat(bootJar.destinationDirectory()).as("destinationDirectory").isDirectory();
|
||||
assertThat(bootJar.destinationDirectory().getAbsolutePath()).as("destinationDirectory")
|
||||
.isEqualTo(Path.of(tmp_dir.getPath(), "build", "dist").toString());
|
||||
assertThat(bootJar.infLibs()).as("infoLibs").isEmpty();
|
||||
assertThat(bootJar.launcherLibs()).as("launcherJars").isEmpty();
|
||||
assertThat(bootJar.destinationFileName()).isEqualTo("test_project-0.0.1-boot.jar");
|
||||
try (var softly = new AutoCloseableSoftAssertions()) {
|
||||
softly.assertThat(bootJar.mainClass()).as("mainClass").isEqualTo(MAIN_CLASS);
|
||||
softly.assertThat(bootJar.sourceDirectories()).as("sourceDirectories.size").hasSize(3)
|
||||
.containsExactly(project.buildMainDirectory(), project.srcMainResourcesDirectory(),
|
||||
new File(SRC_MAIN_JAVA));
|
||||
softly.assertThat(bootJar.manifestAttributes()).as("manifestAttributes.size").hasSize(3);
|
||||
softly.assertThat(bootJar.manifestAttributes().get("Manifest-Version")).as("Manifest-Version")
|
||||
.isEqualTo("1.0");
|
||||
softly.assertThat(bootJar.manifestAttributes().get("Main-Class")).as("Main-Class").endsWith("JarLauncher");
|
||||
softly.assertThat(bootJar.manifestAttributes().get("Start-Class")).as("Start-Class").isEqualTo(MAIN_CLASS);
|
||||
softly.assertThat(bootJar.manifestAttribute("Manifest-Test", "tsst")
|
||||
.manifestAttributes().get("Manifest-Test")).as("Manifest-Test").isEqualTo("tsst");
|
||||
softly.assertThat(bootJar.destinationDirectory()).as("destinationDirectory").isDirectory();
|
||||
softly.assertThat(bootJar.destinationDirectory()).isEqualTo(project.buildDistDirectory());
|
||||
softly.assertThat(bootJar.infLibs()).as("infoLibs").isEmpty();
|
||||
softly.assertThat(bootJar.launcherLibs()).as("launcherJars").isEmpty();
|
||||
softly.assertThat(bootJar.destinationFileName()).isEqualTo("test_project-0.0.1-boot.jar");
|
||||
}
|
||||
|
||||
FileUtils.deleteDirectory(tmp_dir);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testSourceDirectories() {
|
||||
var op = new BootJarOperation();
|
||||
|
||||
var src = new File(SRC_MAIN_JAVA);
|
||||
var test = new File(SRC_TEST_JAVA);
|
||||
op = op.sourceDirectories(SRC_MAIN_JAVA, SRC_TEST_JAVA);
|
||||
assertThat(op.sourceDirectories()).as("String...").containsExactly(src, test);
|
||||
op.sourceDirectories().clear();
|
||||
|
||||
op = op.sourceDirectories(src, test);
|
||||
assertThat(op.sourceDirectories()).as("File...").containsExactly(src, test);
|
||||
op.sourceDirectories().clear();
|
||||
|
||||
op = op.sourceDirectories(src.toPath(), test.toPath());
|
||||
assertThat(op.sourceDirectories()).as("Path...").containsExactly(src, test);
|
||||
op.sourceDirectories().clear();
|
||||
|
||||
op.sourceDirectoriesStrings(List.of(SRC_MAIN_JAVA, SRC_TEST_JAVA));
|
||||
assertThat(op.sourceDirectories()).as("List(String...").containsExactly(src, test);
|
||||
op.sourceDirectories().clear();
|
||||
|
||||
op.sourceDirectories(List.of(src, test));
|
||||
assertThat(op.sourceDirectories()).as("List(File...)").containsExactly(src, test);
|
||||
op.sourceDirectories().clear();
|
||||
|
||||
op.sourceDirectoriesPaths(List.of(src.toPath(), test.toPath()));
|
||||
assertThat(op.sourceDirectories()).as("List(Path...)").containsExactly(src, test);
|
||||
op.sourceDirectories().clear();
|
||||
}
|
||||
|
||||
@Test
|
||||
void testWarProjectExecute() throws Exception {
|
||||
var tmp_dir = Files.createTempDirectory("bootjartmp").toFile();
|
||||
|
@ -300,9 +407,9 @@ class BootJarOperationTest {
|
|||
new BootWarOperation()
|
||||
.fromProject(project)
|
||||
.launcherLibs(List.of(new File(EXAMPLES_LIB_STANDALONE + SPRING_BOOT_LOADER)))
|
||||
.destinationDirectory(tmp_dir)
|
||||
.infLibs(new File(EXAMPLES_LIB_COMPILE + SPRING_BOOT),
|
||||
new File(EXAMPLES_LIB_COMPILE + SPRING_BOOT_ACTUATOR))
|
||||
.destinationDirectory(tmp_dir.toPath())
|
||||
.infLibs(Path.of(EXAMPLES_LIB_COMPILE + SPRING_BOOT),
|
||||
Path.of(EXAMPLES_LIB_COMPILE + SPRING_BOOT_ACTUATOR))
|
||||
.providedLibs(new File(EXAMPLES_LIB_RUNTIME + PROVIDED_LIB))
|
||||
.execute();
|
||||
|
||||
|
@ -320,7 +427,6 @@ class BootJarOperationTest {
|
|||
"WEB-INF/classes/rife/bld/extension/\n" +
|
||||
"WEB-INF/classes/rife/bld/extension/AbstractBootOperation.class\n" +
|
||||
"WEB-INF/classes/rife/bld/extension/BootJarOperation.class\n" +
|
||||
"WEB-INF/classes/rife/bld/extension/BootManifestAttribute.class\n" +
|
||||
"WEB-INF/classes/rife/bld/extension/BootUtils.class\n" +
|
||||
"WEB-INF/classes/rife/bld/extension/BootWarOperation.class\n" +
|
||||
"WEB-INF/lib/\n" +
|
||||
|
@ -334,6 +440,24 @@ class BootJarOperationTest {
|
|||
FileUtils.deleteDirectory(tmp_dir);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testWarProvidedLibs() {
|
||||
var op = new BootWarOperation();
|
||||
|
||||
var foo = new File(EXAMPLES_LIB_RUNTIME + PROVIDED_LIB);
|
||||
op = op.providedLibs(EXAMPLES_LIB_RUNTIME + PROVIDED_LIB);
|
||||
assertThat(op.providedLibs()).containsExactly(foo);
|
||||
op.providedLibs().clear();
|
||||
|
||||
op = op.providedLibs(foo);
|
||||
assertThat(op.providedLibs()).containsExactly(foo);
|
||||
op.providedLibs().clear();
|
||||
|
||||
op = op.providedLibs(foo.toPath());
|
||||
assertThat(op.providedLibs()).containsExactly(foo);
|
||||
op.providedLibs().clear();
|
||||
}
|
||||
|
||||
static class CustomProject extends Project {
|
||||
CustomProject(File tmp) {
|
||||
super();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue