diff --git a/.github/workflows/bld.yml b/.github/workflows/bld.yml index 2b0ba38..94c08ea 100644 --- a/.github/workflows/bld.yml +++ b/.github/workflows/bld.yml @@ -4,29 +4,36 @@ on: [ push, pull_request, workflow_dispatch ] jobs: build-bld-project: - runs-on: ubuntu-latest - strategy: matrix: - java-version: [ 17, 20 ] + java-version: [ 17, 21, 24 ] + kotlin-version: [ 1.9.25, 2.0.21, 2.1.20 ] + os: [ ubuntu-latest, windows-latest, macos-latest ] + + runs-on: ${{ matrix.os }} steps: - name: Checkout source repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up JDK ${{ matrix.java-version }} - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: - distribution: 'zulu' + distribution: "zulu" java-version: ${{ matrix.java-version }} - - name: Grant execute permission for bld - run: chmod +x bld - - - name: Download the dependencies + - name: Download dependencies [examples] + working-directory: examples run: ./bld download - - name: Run tests with bld - run: ./bld compile test + - name: Compile and run [examples] + working-directory: examples + run: ./bld compile run + + - name: Download dependencies + run: ./bld download + + - name: Run tests + run: ./bld compile test \ No newline at end of file diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml index f6122cd..508f6a5 100644 --- a/.github/workflows/pages.yml +++ b/.github/workflows/pages.yml @@ -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 \ No newline at end of file + uses: actions/deploy-pages@v4 diff --git a/.idea/bld.xml b/.idea/bld.xml new file mode 100644 index 0000000..6600cee --- /dev/null +++ b/.idea/bld.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/copyright/Apache_License.xml b/.idea/copyright/Apache_License.xml index ade80da..4446c15 100644 --- a/.idea/copyright/Apache_License.xml +++ b/.idea/copyright/Apache_License.xml @@ -1,6 +1,6 @@ - - + \ No newline at end of file diff --git a/.idea/icon.svg b/.idea/icon.svg new file mode 100644 index 0000000..81220b4 --- /dev/null +++ b/.idea/icon.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/.idea/libraries/bld.xml b/.idea/libraries/bld.xml index 0b615c1..153a060 100644 --- a/.idea/libraries/bld.xml +++ b/.idea/libraries/bld.xml @@ -2,12 +2,12 @@ - + - + diff --git a/.idea/libraries/compile.xml b/.idea/libraries/compile.xml index 9bd86aa..99cc0c0 100644 --- a/.idea/libraries/compile.xml +++ b/.idea/libraries/compile.xml @@ -7,7 +7,7 @@ - - + + \ No newline at end of file diff --git a/.idea/libraries/runtime.xml b/.idea/libraries/runtime.xml index 2ae5c4b..d4069f2 100644 --- a/.idea/libraries/runtime.xml +++ b/.idea/libraries/runtime.xml @@ -8,7 +8,7 @@ - - + + \ No newline at end of file diff --git a/.idea/libraries/test.xml b/.idea/libraries/test.xml index b80486a..57ed5ef 100644 --- a/.idea/libraries/test.xml +++ b/.idea/libraries/test.xml @@ -8,7 +8,7 @@ - - + + \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 9e8368e..ba429d0 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -9,7 +9,7 @@ ], "java.configuration.updateBuildConfiguration": "automatic", "java.project.referencedLibraries": [ - "${HOME}/.bld/dist/bld-1.9.0.jar", + "${HOME}/.bld/dist/bld-2.2.1.jar", "lib/**/*.jar" ] } diff --git a/README.md b/README.md index 460ade8..23c69a2 100755 --- a/README.md +++ b/README.md @@ -3,12 +3,20 @@ [![License](https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![Java](https://img.shields.io/badge/java-17%2B-blue)](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html) -[![bld](https://img.shields.io/badge/1.9.0-FA9052?label=bld&labelColor=2392FF)](https://rife2.com/bld) +[![bld](https://img.shields.io/badge/2.2.1-FA9052?label=bld&labelColor=2392FF)](https://rife2.com/bld) [![Release](https://flat.badgen.net/maven/v/metadata-url/repo.rife2.com/releases/com/uwyn/rife2/bld-generated-version/maven-metadata.xml?color=blue)](https://repo.rife2.com/#/releases/com/uwyn/rife2/bld-generated-version) [![Snapshot](https://flat.badgen.net/maven/v/metadata-url/repo.rife2.com/snapshots/com/uwyn/rife2/bld-generated-version/maven-metadata.xml?label=snapshot)](https://repo.rife2.com/#/snapshots/com/uwyn/rife2/bld-generated-version) [![GitHub CI](https://github.com/rife2/bld-generated-version/actions/workflows/bld.yml/badge.svg)](https://github.com/rife2/bld-generated-version/actions/workflows/bld.yml) -To install, please refer to the [extensions documentation](https://github.com/rife2/bld/wiki/Extensions). +To install the latest version, add the following to the `lib/bld/bld-wrapper.properties` file: + +```properties +bld.extension-generated-version=com.uwyn.rife2:bld-generated-version +``` + +For more information, please refer to the [extensions](https://github.com/rife2/bld/wiki/Extensions) documentation. + +## Generate Version Data Class To automatically create a generated version class using the default template in your project on compile, add the following to your build file: ```java @@ -66,12 +74,12 @@ public void genver() throws Exception { .projectName("My App") .packageName("com.example.myapp") .className("MyAppVersion") - .classTemplate(new File(workDirectory, "myversion.txt")) + .classTemplate("my_app_version.txt") .execute(); } ``` ```java -// myversion.txt +// my_app_version.txt package {{v packageName/}}; diff --git a/config/pmd.xml b/config/pmd.xml index 1039e40..2641880 100644 --- a/config/pmd.xml +++ b/config/pmd.xml @@ -7,9 +7,9 @@ - - + + @@ -24,8 +24,8 @@ - + @@ -35,8 +35,9 @@ - + + @@ -52,8 +53,6 @@ - - @@ -107,4 +106,4 @@ - \ No newline at end of file + diff --git a/examples/.idea/libraries/bld.xml b/examples/.idea/libraries/bld.xml index 0b615c1..153a060 100644 --- a/examples/.idea/libraries/bld.xml +++ b/examples/.idea/libraries/bld.xml @@ -2,12 +2,12 @@ - + - + diff --git a/examples/.idea/libraries/compile.xml b/examples/.idea/libraries/compile.xml index 9bd86aa..99cc0c0 100644 --- a/examples/.idea/libraries/compile.xml +++ b/examples/.idea/libraries/compile.xml @@ -7,7 +7,7 @@ - - + + \ No newline at end of file diff --git a/examples/.idea/libraries/runtime.xml b/examples/.idea/libraries/runtime.xml index 2ae5c4b..d4069f2 100644 --- a/examples/.idea/libraries/runtime.xml +++ b/examples/.idea/libraries/runtime.xml @@ -8,7 +8,7 @@ - - + + \ No newline at end of file diff --git a/examples/.idea/libraries/test.xml b/examples/.idea/libraries/test.xml index b80486a..57ed5ef 100644 --- a/examples/.idea/libraries/test.xml +++ b/examples/.idea/libraries/test.xml @@ -8,7 +8,7 @@ - - + + \ No newline at end of file diff --git a/examples/.vscode/settings.json b/examples/.vscode/settings.json index 9e8368e..ba429d0 100644 --- a/examples/.vscode/settings.json +++ b/examples/.vscode/settings.json @@ -9,7 +9,7 @@ ], "java.configuration.updateBuildConfiguration": "automatic", "java.project.referencedLibraries": [ - "${HOME}/.bld/dist/bld-1.9.0.jar", + "${HOME}/.bld/dist/bld-2.2.1.jar", "lib/**/*.jar" ] } diff --git a/examples/lib/bld/bld-wrapper.jar b/examples/lib/bld/bld-wrapper.jar index e637135..3842a62 100644 Binary files a/examples/lib/bld/bld-wrapper.jar and b/examples/lib/bld/bld-wrapper.jar differ diff --git a/examples/lib/bld/bld-wrapper.properties b/examples/lib/bld/bld-wrapper.properties index 7afe142..bc257d2 100644 --- a/examples/lib/bld/bld-wrapper.properties +++ b/examples/lib/bld/bld-wrapper.properties @@ -1,6 +1,6 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true -bld.extensions=com.uwyn.rife2:bld-generated-version:0.9.5 -bld.repositories=MAVEN_LOCAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES bld.downloadLocation= -bld.version=1.9.0 +bld.extension-gv=com.uwyn.rife2:bld-generated-version:1.0.1 +bld.repositories=MAVEN_LOCAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES +bld.version=2.2.1 diff --git a/examples/my_app_version.txt b/examples/my_app_version.txt new file mode 100644 index 0000000..3d4c223 --- /dev/null +++ b/examples/my_app_version.txt @@ -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); + } + } +} \ No newline at end of file diff --git a/examples/src/bld/java/com/example/SampleBuild.java b/examples/src/bld/java/com/example/SampleBuild.java index 80e1fce..c9303a6 100644 --- a/examples/src/bld/java/com/example/SampleBuild.java +++ b/examples/src/bld/java/com/example/SampleBuild.java @@ -4,7 +4,6 @@ import rife.bld.BuildCommand; import rife.bld.Project; import rife.bld.extension.GeneratedVersionOperation; -import java.io.File; import java.util.List; import static rife.bld.dependencies.Repository.MAVEN_CENTRAL; @@ -13,10 +12,6 @@ import static rife.bld.dependencies.Scope.test; /** * Example build. - * - *
    - *
  • ./bld compile run
  • - *
*/ public class SampleBuild extends Project { public SampleBuild() { @@ -25,13 +20,15 @@ public class SampleBuild extends Project { mainClass = "com.example.SampleMain"; version = version(1, 0, 1, "rc1"); + javaRelease = 17; + autoDownloadPurge = true; downloadSources = true; repositories = List.of(MAVEN_CENTRAL, RIFE2_RELEASES); scope(test) - .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 10, 2))) - .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 10, 2))); + .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 12, 1))) + .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 12, 1))); } public static void main(String[] args) { @@ -49,7 +46,8 @@ public class SampleBuild extends Project { new GeneratedVersionOperation() .fromProject(this) // .projectName("My App") -// .classTemplate(new File(workDirectory, "myversion.txt")) +// .classTemplate("my_app_version.txt") +// .classTemplate("version.txt") .execute(); } } diff --git a/examples/src/main/java/com/example/GeneratedVersion.java b/examples/src/main/java/com/example/GeneratedVersion.java index 6e1506d..64ecb97 100644 --- a/examples/src/main/java/com/example/GeneratedVersion.java +++ b/examples/src/main/java/com/example/GeneratedVersion.java @@ -1,4 +1,4 @@ -/* +/** * This file is automatically generated. * Do not modify! -- ALL CHANGES WILL BE ERASED! */ @@ -12,7 +12,7 @@ import java.util.Date; */ public final class GeneratedVersion { public static final String PROJECT = "Sample"; - public static final Date BUILD_DATE = new Date(1708978279960L); + public static final Date BUILD_DATE = new Date(1736843939053L); public static final int MAJOR = 1; public static final int MINOR = 0; public static final int REVISION = 1; diff --git a/examples/myversion.txt b/examples/version.txt similarity index 100% rename from examples/myversion.txt rename to examples/version.txt diff --git a/lib/bld/bld-wrapper.jar b/lib/bld/bld-wrapper.jar index 82175be..e26a2ae 100644 Binary files a/lib/bld/bld-wrapper.jar and b/lib/bld/bld-wrapper.jar differ diff --git a/lib/bld/bld-wrapper.properties b/lib/bld/bld-wrapper.properties index f75783a..42fad1d 100644 --- a/lib/bld/bld-wrapper.properties +++ b/lib/bld/bld-wrapper.properties @@ -1,7 +1,6 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true -bld.extension-pmd=com.uwyn.rife2:bld-pmd:0.9.7 -bld.extension-jacoco=com.uwyn.rife2:bld-jacoco-report:0.9.3 -bld.repositories=MAVEN_CENTRAL,MAVEN_LOCAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES bld.downloadLocation= -bld.version=1.9.0 +bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.2.2 +bld.repositories=MAVEN_CENTRAL,MAVEN_LOCAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES +bld.version=2.2.1 diff --git a/src/bld/java/rife/bld/extension/GeneratedVersionOperationBuild.java b/src/bld/java/rife/bld/extension/GeneratedVersionOperationBuild.java index 3030d78..d355d07 100644 --- a/src/bld/java/rife/bld/extension/GeneratedVersionOperationBuild.java +++ b/src/bld/java/rife/bld/extension/GeneratedVersionOperationBuild.java @@ -1,5 +1,5 @@ /* - * Copyright 2023-2024 the original author or authors. + * Copyright 2023-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,11 +22,9 @@ import rife.bld.publish.PublishDeveloper; import rife.bld.publish.PublishLicense; import rife.bld.publish.PublishScm; -import java.io.IOException; import java.util.List; -import static rife.bld.dependencies.Repository.MAVEN_CENTRAL; -import static rife.bld.dependencies.Repository.RIFE2_RELEASES; +import static rife.bld.dependencies.Repository.*; import static rife.bld.dependencies.Scope.compile; import static rife.bld.dependencies.Scope.test; import static rife.bld.operations.JavadocOptions.DocLinkOption.NO_MISSING; @@ -36,19 +34,21 @@ public class GeneratedVersionOperationBuild extends Project { public GeneratedVersionOperationBuild() { pkg = "rife.bld.extension"; name = "GeneratedVersionOperation"; - version = version(0, 9, 5); + version = version(1, 0, 1); javaRelease = 17; + downloadSources = true; autoDownloadPurge = true; - repositories = List.of(MAVEN_CENTRAL, RIFE2_RELEASES); + + repositories = List.of(MAVEN_CENTRAL, RIFE2_RELEASES, RIFE2_SNAPSHOTS); scope(compile) - .include(dependency("com.uwyn.rife2", "bld", version(1, 9, 0))); + .include(dependency("com.uwyn.rife2", "bld", version(2, 2, 1))); scope(test) - .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 10, 2))) - .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 10, 2))) - .include(dependency("org.assertj", "assertj-core", version(3, 25, 3))); + .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 12, 1))) + .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 12, 1))) + .include(dependency("org.assertj", "assertj-core", version(3, 27, 3))); precompileOperation() .templateTypes(TXT); @@ -63,28 +63,26 @@ public class GeneratedVersionOperationBuild extends Project { publishOperation() .repositories(version.isSnapshot() ? repository("rife2-snapshot") : repository("rife2")) + .repository(repository("github")) .info() .groupId("com.uwyn.rife2") .artifactId("bld-generated-version") .description("bld Extension to Generate Project Version Data") .url("https://github.com/rife2/generated-version") - .developer( - new PublishDeveloper() - .id("ethauvin") - .name("Erik C. Thauvin") - .email("erik@thauvin.net") - .url("https://erik.thauvin.net/") + .developer(new PublishDeveloper() + .id("ethauvin") + .name("Erik C. Thauvin") + .email("erik@thauvin.net") + .url("https://erik.thauvin.net/") ) - .license( - new PublishLicense() - .name("The Apache License, Version 2.0") - .url("http://www.apache.org/licenses/LICENSE-2.0.txt") + .license(new PublishLicense() + .name("The Apache License, Version 2.0") + .url("https://www.apache.org/licenses/LICENSE-2.0.txt") ) - .scm( - new PublishScm() - .connection("scm:git:https://github.com/rife2/generated-version.git") - .developerConnection("scm:git:git@github.com:rife2/generated-version.git") - .url("https://github.com/rife2/generated-version") + .scm(new PublishScm() + .connection("scm:git:https://github.com/rife2/generated-version.git") + .developerConnection("scm:git:git@github.com:rife2/generated-version.git") + .url("https://github.com/rife2/generated-version") ) .signKey(property("sign.key")) .signPassphrase(property("sign.passphrase")); @@ -94,15 +92,8 @@ public class GeneratedVersionOperationBuild extends Project { new GeneratedVersionOperationBuild().start(args); } - @BuildCommand(summary = "Generates JaCoCo Reports") - public void jacoco() throws IOException { - new JacocoReportOperation() - .fromProject(this) - .execute(); - } - @BuildCommand(summary = "Runs PMD analysis") - public void pmd() { + public void pmd() throws Exception { new PmdOperation() .fromProject(this) .failOnViolation(true) diff --git a/src/main/java/rife/bld/extension/GeneratedVersion.java b/src/main/java/rife/bld/extension/GeneratedVersion.java index 4cf1ddd..9ae40fb 100644 --- a/src/main/java/rife/bld/extension/GeneratedVersion.java +++ b/src/main/java/rife/bld/extension/GeneratedVersion.java @@ -1,5 +1,5 @@ /* - * Copyright 2023-2024 the original author or authors. + * Copyright 2023-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,8 +17,16 @@ package rife.bld.extension; import rife.bld.BaseProject; +import rife.resources.ResourceFinderClasspath; +import rife.resources.ResourceFinderDirectories; +import rife.resources.ResourceFinderGroup; +import rife.template.Template; +import rife.template.TemplateFactory; +import rife.tools.FileUtils; import java.io.File; +import java.io.IOException; +import java.nio.file.Path; /** * GeneratedVersion data class. @@ -26,16 +34,93 @@ import java.io.File; * @author Erik C. Thauvin * @since 1.0 */ -@SuppressWarnings("PMD.DataClass") public class GeneratedVersion { - private File classFile; - private String className; - private File directory; - private String extension = ".java"; - private String packageName; - private BaseProject project; - private String projectName; - private File template; + private static final String CLASSNAME = "className"; + private static final String EPOCH = "epoch"; + private static final String MAJOR = "major"; + private static final String MINOR = "minor"; + private static final String PACKAGE_NAME = "packageName"; + private static final String PROJECT = "project"; + private static final String QUALIFIER = "qualifier"; + private static final String REVISION = "revision"; + private static final String VERSION = "version"; + private File classFile_; + private String className_ = "GeneratedVersion"; + private File directory_; + private String extension_ = ".java"; + private String packageName_; + private String projectName_; + private BaseProject project_; + private File template_; + + /** + * Builds the template based on the {@link GeneratedVersion} data. + * + * @return the template + */ + public Template buildTemplate() { + Template template; + var version = project_.version(); + TemplateFactory.TXT.resetClassLoader(); + if (template_ == null) { + var group = new ResourceFinderGroup().add(ResourceFinderClasspath.instance()); + template = TemplateFactory.TXT.setResourceFinder(group).get("default_generated_version"); + } else { + File parent; + if (template_.getParentFile() != null) { + parent = template_.getParentFile(); + } else { + parent = new File(template_.getAbsolutePath()).getParentFile(); + } + var group = new ResourceFinderGroup().add(new ResourceFinderDirectories(parent)); + template = TemplateFactory.TXT.setResourceFinder(group).get(template_.getName()); + } + + if (packageName_ == null) { + packageName_ = project_.pkg(); + } + + if (template.hasValueId(PACKAGE_NAME)) { + template.setValue(PACKAGE_NAME, packageName_); + } + + if (template.hasValueId(CLASSNAME)) { + template.setValue(CLASSNAME, className_); + } + + if (template.hasValueId(PROJECT)) { + if (projectName_ == null) { + projectName_ = project_.name(); + } + template.setValue(PROJECT, projectName_); + } + + if (template.hasValueId(EPOCH)) { + template.setValue(EPOCH, System.currentTimeMillis()); + } + + if (template.hasValueId(VERSION)) { + template.setValue(VERSION, version.toString()); + } + + if (template.hasValueId(MAJOR)) { + template.setValue(MAJOR, version.majorInt()); + } + + if (template.hasValueId(MINOR)) { + template.setValue(MINOR, version.minorInt()); + } + + if (template.hasValueId(REVISION)) { + template.setValue(REVISION, version.revisionInt()); + } + + if (template.hasValueId(QUALIFIER)) { + template.setValue(QUALIFIER, version.qualifier()); + } + + return template; + } /** * Returns the class file. @@ -43,7 +128,7 @@ public class GeneratedVersion { * @return the class file */ public File getClassFile() { - return classFile; + return classFile_; } /** @@ -52,7 +137,7 @@ public class GeneratedVersion { * @return the class name */ public String getClassName() { - return className; + return className_; } /** @@ -61,7 +146,7 @@ public class GeneratedVersion { * @return the destination directory */ public File getDirectory() { - return directory; + return directory_; } /** @@ -70,7 +155,7 @@ public class GeneratedVersion { * @return the file extension */ public String getExtension() { - return extension; + return extension_; } /** @@ -79,7 +164,7 @@ public class GeneratedVersion { * @return the package name */ public String getPackageName() { - return packageName; + return packageName_; } /** @@ -88,7 +173,7 @@ public class GeneratedVersion { * @return the project */ public BaseProject getProject() { - return project; + return project_; } /** @@ -97,7 +182,7 @@ public class GeneratedVersion { * @return the project name */ public String getProjectName() { - return projectName; + return projectName_; } /** @@ -106,16 +191,7 @@ public class GeneratedVersion { * @return the template */ public File getTemplate() { - return template; - } - - /** - * Sets the class file. - * - * @param classFile the class file - */ - public void setClassFile(File classFile) { - this.classFile = classFile; + return template_; } /** @@ -124,7 +200,7 @@ public class GeneratedVersion { * @param className the class name */ public void setClassName(String className) { - this.className = className; + this.className_ = className; } /** @@ -133,7 +209,7 @@ public class GeneratedVersion { * @param directory the destination directory */ public void setDirectory(File directory) { - this.directory = directory; + this.directory_ = directory; } /** @@ -142,7 +218,7 @@ public class GeneratedVersion { * @param extension the file extension */ public void setExtension(String extension) { - this.extension = extension; + this.extension_ = extension; } /** @@ -151,7 +227,7 @@ public class GeneratedVersion { * @param packageName the package name */ public void setPackageName(String packageName) { - this.packageName = packageName; + this.packageName_ = packageName; } /** @@ -160,7 +236,7 @@ public class GeneratedVersion { * @param project the project */ public void setProject(BaseProject project) { - this.project = project; + this.project_ = project; } /** @@ -169,7 +245,7 @@ public class GeneratedVersion { * @param projectName the project name */ public void setProjectName(String projectName) { - this.projectName = projectName; + this.projectName_ = projectName; } /** @@ -178,6 +254,31 @@ public class GeneratedVersion { * @param template the template */ public void setTemplate(File template) { - this.template = template; + this.template_ = template; + } + + /** + * Writes the project version class in the given directory. + */ + public void writeTemplate(Template template) throws IOException { + if (packageName_ != null) { + classFile_ = Path.of(directory_.getAbsolutePath(), packageName_.replace(".", File.separator), + className_ + extension_).toFile(); + } else { + classFile_ = new File(directory_, className_ + ".java"); + } + + if (!classFile_.getParentFile().exists()) { + var dirs = classFile_.getParentFile().mkdirs(); + if (!dirs && !classFile_.getParentFile().exists()) { + throw new IOException("Could not create project package directories: " + classFile_.getParent()); + } + } + + try { + FileUtils.writeString(template.getContent(), classFile_); + } catch (IOException e) { + throw new IOException("Unable to write the version class file: " + e.getMessage(), e); + } } } diff --git a/src/main/java/rife/bld/extension/GeneratedVersionOperation.java b/src/main/java/rife/bld/extension/GeneratedVersionOperation.java index 628d1e5..6a5e065 100644 --- a/src/main/java/rife/bld/extension/GeneratedVersionOperation.java +++ b/src/main/java/rife/bld/extension/GeneratedVersionOperation.java @@ -1,5 +1,5 @@ /* - * Copyright 2023-2024 the original author or authors. + * Copyright 2023-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,16 +19,10 @@ package rife.bld.extension; import rife.bld.BaseProject; import rife.bld.operations.AbstractOperation; -import rife.resources.ResourceFinderDirectories; -import rife.template.Template; -import rife.template.TemplateConfig; -import rife.template.TemplateFactory; -import rife.tools.FileUtils; +import rife.bld.operations.exceptions.ExitStatusException; import java.io.File; -import java.io.IOException; import java.nio.file.Path; -import java.util.Objects; import java.util.logging.Level; import java.util.logging.Logger; @@ -39,119 +33,8 @@ import java.util.logging.Logger; * @since 1.0 */ public class GeneratedVersionOperation extends AbstractOperation { - private static final String CLASSNAME = "className"; - private static final String EPOCH = "epoch"; private static final Logger LOGGER = Logger.getLogger(GeneratedVersionOperation.class.getName()); - private static final String MAJOR = "major"; - private static final String MINOR = "minor"; - private static final String PACKAGE_NAME = "packageName"; - private static final String PROJECT = "project"; - private static final String QUALIFIER = "qualifier"; - private static final String REVISION = "revision"; - private static final String VERSION = "version"; - private final GeneratedVersion generatedVersion = new GeneratedVersion(); - - /** - * Builds the template based on the {@link GeneratedVersion} data. - * - * @param gv the generated version - * @return the template - */ - public static Template buildTemplate(GeneratedVersion gv) { - Template template; - var version = gv.getProject().version(); - if (gv.getTemplate() == null) { - template = TemplateFactory.TXT.get("version.txt"); - } else { - var files = new ResourceFinderDirectories(gv.getTemplate().getParentFile()); - template = new TemplateFactory(TemplateConfig.TXT, "txtFiles", TemplateFactory.TXT) - .setResourceFinder(files).get(gv.getTemplate().getName()); - } - - if (gv.getPackageName() == null) { - gv.setPackageName(gv.getProject().pkg()); - } - - if (template.hasValueId(PACKAGE_NAME)) { - template.setValue(PACKAGE_NAME, gv.getPackageName()); - } - - gv.setClassName(Objects.requireNonNullElse(gv.getClassName(), "GeneratedVersion")); - if (template.hasValueId(CLASSNAME)) { - template.setValue(CLASSNAME, gv.getClassName()); - } - - if (template.hasValueId(PROJECT)) { - if (gv.getProjectName() == null) { - gv.setProjectName(gv.getProject().name()); - } - template.setValue(PROJECT, gv.getProjectName()); - } - - if (template.hasValueId(EPOCH)) { - template.setValue(EPOCH, System.currentTimeMillis()); - } - - if (template.hasValueId(VERSION)) { - template.setValue(VERSION, version.toString()); - } - - if (template.hasValueId(MAJOR)) { - template.setValue(MAJOR, version.majorInt()); - } - - if (template.hasValueId(MINOR)) { - template.setValue(MINOR, version.minorInt()); - } - - if (template.hasValueId(REVISION)) { - template.setValue(REVISION, version.revisionInt()); - } - - if (template.hasValueId(QUALIFIER)) { - template.setValue(QUALIFIER, version.qualifier()); - } - - return template; - } - - /** - * Writes the project version class in the given directory. - * - * @param template the template - * @param gv the generated version - */ - public static void writeTemplate(Template template, GeneratedVersion gv) { - if (gv.getPackageName() != null) { - gv.setClassFile(Path.of(gv.getDirectory().getAbsolutePath(), - gv.getPackageName().replace(".", File.separator), gv.getClassName() - + gv.getExtension()).toFile()); - } else { - gv.setClassFile(Path.of(gv.getDirectory().getAbsolutePath(), gv.getClassName() + ".java").toFile()); - } - - if (!gv.getClassFile().getParentFile().exists()) { - var mkdirs = gv.getClassFile().getParentFile().mkdirs(); - if (!mkdirs && !gv.getClassFile().getParentFile().exists() && LOGGER.isLoggable(Level.SEVERE)) { - LOGGER.log(Level.SEVERE, "Could not create project package directories: {0}", - gv.getClassFile().getParent()); - } - } - - try { - var updated = gv.getClassFile().exists(); - FileUtils.writeString(template.getContent(), gv.getClassFile()); - if (LOGGER.isLoggable(Level.INFO)) { - LOGGER.log(Level.INFO, "Generated version ({0}) class has been {1}: {2}", - new String[]{gv.getProject().version().toString(), updated ? "updated" : "created", - gv.getClassFile().toString()}); - } - } catch (IOException e) { - if (LOGGER.isLoggable(Level.SEVERE)) { - LOGGER.log(Level.SEVERE, "Unable to write the version class file.", e); - } - } - } + private final GeneratedVersion generatedVersion_ = new GeneratedVersion(); /** * Sets the class name. @@ -160,7 +43,7 @@ public class GeneratedVersionOperation extends AbstractOperation