diff --git a/.github/workflows/bld.yml b/.github/workflows/bld.yml index 94c08ea..c0ba763 100644 --- a/.github/workflows/bld.yml +++ b/.github/workflows/bld.yml @@ -1,16 +1,14 @@ name: bld-ci -on: [ push, pull_request, workflow_dispatch ] +on: [push, pull_request, workflow_dispatch] jobs: build-bld-project: + runs-on: ubuntu-latest + strategy: matrix: - 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 }} + java-version: [17, 21, 22] steps: - name: Checkout source repository @@ -24,16 +22,11 @@ jobs: distribution: "zulu" java-version: ${{ matrix.java-version }} - - name: Download dependencies [examples] - working-directory: examples + - name: Grant execute permission for bld + run: chmod +x bld + + - name: Download the dependencies run: ./bld download - - 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 + - name: Run tests with bld + run: ./bld compile test diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml index 508f6a5..bf43624 100644 --- a/.github/workflows/pages.yml +++ b/.github/workflows/pages.yml @@ -47,11 +47,11 @@ jobs: uses: actions/configure-pages@v3 - name: Upload artifact - uses: actions/upload-pages-artifact@v3 + uses: actions/upload-pages-artifact@v1 with: # Upload generated Javadocs repository path: "build/javadoc/" - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@v4 + uses: actions/deploy-pages@v1 diff --git a/.idea/bld.xml b/.idea/bld.xml deleted file mode 100644 index 6600cee..0000000 --- a/.idea/bld.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/copyright/Apache_License.xml b/.idea/copyright/Apache_License.xml index 4446c15..ade80da 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 deleted file mode 100644 index 81220b4..0000000 --- a/.idea/icon.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/.idea/libraries/bld.xml b/.idea/libraries/bld.xml index 153a060..a2969be 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 99cc0c0..9bd86aa 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 d4069f2..2ae5c4b 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 57ed5ef..b80486a 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 ba429d0..d136e4d 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -9,7 +9,7 @@ ], "java.configuration.updateBuildConfiguration": "automatic", "java.project.referencedLibraries": [ - "${HOME}/.bld/dist/bld-2.2.1.jar", + "${HOME}/.bld/dist/bld-1.9.1.jar", "lib/**/*.jar" ] } diff --git a/README.md b/README.md index 23c69a2..c128f29 100755 --- a/README.md +++ b/README.md @@ -3,20 +3,12 @@ [![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/2.2.1-FA9052?label=bld&labelColor=2392FF)](https://rife2.com/bld) +[![bld](https://img.shields.io/badge/1.9.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 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 install, please refer to the [extensions documentation](https://github.com/rife2/bld/wiki/Extensions). To automatically create a generated version class using the default template in your project on compile, add the following to your build file: ```java @@ -74,12 +66,12 @@ public void genver() throws Exception { .projectName("My App") .packageName("com.example.myapp") .className("MyAppVersion") - .classTemplate("my_app_version.txt") + .classTemplate(new File(workDirectory, "myversion.txt")) .execute(); } ``` ```java -// my_app_version.txt +// myversion.txt package {{v packageName/}}; diff --git a/config/pmd.xml b/config/pmd.xml index 2641880..3d3203c 100644 --- a/config/pmd.xml +++ b/config/pmd.xml @@ -7,9 +7,9 @@ + + - - diff --git a/examples/.idea/libraries/bld.xml b/examples/.idea/libraries/bld.xml index 153a060..a2969be 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 99cc0c0..9bd86aa 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 d4069f2..2ae5c4b 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 57ed5ef..b80486a 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 ba429d0..d136e4d 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-2.2.1.jar", + "${HOME}/.bld/dist/bld-1.9.1.jar", "lib/**/*.jar" ] } diff --git a/examples/lib/bld/bld-wrapper.jar b/examples/lib/bld/bld-wrapper.jar index 3842a62..18ecfd4 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 bc257d2..d315b82 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.downloadLocation= -bld.extension-gv=com.uwyn.rife2:bld-generated-version:1.0.1 +bld.extensions=com.uwyn.rife2:bld-generated-version:0.9.6 bld.repositories=MAVEN_LOCAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES -bld.version=2.2.1 +bld.downloadLocation= +bld.version=1.9.1 diff --git a/examples/my_app_version.txt b/examples/my_app_version.txt deleted file mode 100644 index 3d4c223..0000000 --- a/examples/my_app_version.txt +++ /dev/null @@ -1,30 +0,0 @@ -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/version.txt b/examples/myversion.txt similarity index 100% rename from examples/version.txt rename to examples/myversion.txt diff --git a/examples/src/bld/java/com/example/SampleBuild.java b/examples/src/bld/java/com/example/SampleBuild.java index c9303a6..ef51aad 100644 --- a/examples/src/bld/java/com/example/SampleBuild.java +++ b/examples/src/bld/java/com/example/SampleBuild.java @@ -4,6 +4,7 @@ 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; @@ -27,8 +28,8 @@ public class SampleBuild extends Project { repositories = List.of(MAVEN_CENTRAL, RIFE2_RELEASES); scope(test) - .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.junit.jupiter", "junit-jupiter", version(5, 10, 2))) + .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 10, 2))); } public static void main(String[] args) { @@ -46,8 +47,7 @@ public class SampleBuild extends Project { new GeneratedVersionOperation() .fromProject(this) // .projectName("My App") -// .classTemplate("my_app_version.txt") -// .classTemplate("version.txt") +// .classTemplate(new File(workDirectory, "myversion.txt")) .execute(); } } diff --git a/examples/src/main/java/com/example/GeneratedVersion.java b/examples/src/main/java/com/example/GeneratedVersion.java index 64ecb97..82cafb7 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(1736843939053L); + public static final Date BUILD_DATE = new Date(1713398927971L); public static final int MAJOR = 1; public static final int MINOR = 0; public static final int REVISION = 1; diff --git a/lib/bld/bld-wrapper.jar b/lib/bld/bld-wrapper.jar index e26a2ae..b4504b3 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 42fad1d..6e26fef 100644 --- a/lib/bld/bld-wrapper.properties +++ b/lib/bld/bld-wrapper.properties @@ -1,6 +1,7 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true -bld.downloadLocation= -bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.2.2 +bld.extension-pmd=com.uwyn.rife2:bld-pmd:0.9.9 +bld.extension-jacoco=com.uwyn.rife2:bld-jacoco-report:0.9.5 bld.repositories=MAVEN_CENTRAL,MAVEN_LOCAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES -bld.version=2.2.1 +bld.downloadLocation= +bld.version=1.9.1 diff --git a/src/bld/java/rife/bld/extension/GeneratedVersionOperationBuild.java b/src/bld/java/rife/bld/extension/GeneratedVersionOperationBuild.java index d355d07..f50c17e 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-2025 the original author or authors. + * 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. @@ -22,9 +22,11 @@ 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.*; +import static rife.bld.dependencies.Repository.MAVEN_CENTRAL; +import static rife.bld.dependencies.Repository.RIFE2_RELEASES; import static rife.bld.dependencies.Scope.compile; import static rife.bld.dependencies.Scope.test; import static rife.bld.operations.JavadocOptions.DocLinkOption.NO_MISSING; @@ -34,21 +36,19 @@ public class GeneratedVersionOperationBuild extends Project { public GeneratedVersionOperationBuild() { pkg = "rife.bld.extension"; name = "GeneratedVersionOperation"; - version = version(1, 0, 1); + version = version(0, 9, 6); javaRelease = 17; - downloadSources = true; autoDownloadPurge = true; - - repositories = List.of(MAVEN_CENTRAL, RIFE2_RELEASES, RIFE2_SNAPSHOTS); + repositories = List.of(MAVEN_CENTRAL, RIFE2_RELEASES); scope(compile) - .include(dependency("com.uwyn.rife2", "bld", version(2, 2, 1))); + .include(dependency("com.uwyn.rife2", "bld", version(1, 9, 1))); scope(test) - .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))); + .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, 26, 0))); precompileOperation() .templateTypes(TXT); @@ -63,26 +63,28 @@ 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("https://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")); @@ -92,8 +94,15 @@ public class GeneratedVersionOperationBuild extends Project { new GeneratedVersionOperationBuild().start(args); } + @BuildCommand(summary = "Generates JaCoCo Reports") + public void jacoco() throws IOException { + new JacocoReportOperation() + .fromProject(this) + .execute(); + } + @BuildCommand(summary = "Runs PMD analysis") - public void pmd() throws Exception { + public void pmd() { 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 9ae40fb..4cf1ddd 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-2025 the original author or authors. + * 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. @@ -17,16 +17,8 @@ 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. @@ -34,93 +26,16 @@ import java.nio.file.Path; * @author Erik C. Thauvin * @since 1.0 */ +@SuppressWarnings("PMD.DataClass") public class GeneratedVersion { - 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; - } + 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; /** * Returns the class file. @@ -128,7 +43,7 @@ public class GeneratedVersion { * @return the class file */ public File getClassFile() { - return classFile_; + return classFile; } /** @@ -137,7 +52,7 @@ public class GeneratedVersion { * @return the class name */ public String getClassName() { - return className_; + return className; } /** @@ -146,7 +61,7 @@ public class GeneratedVersion { * @return the destination directory */ public File getDirectory() { - return directory_; + return directory; } /** @@ -155,7 +70,7 @@ public class GeneratedVersion { * @return the file extension */ public String getExtension() { - return extension_; + return extension; } /** @@ -164,7 +79,7 @@ public class GeneratedVersion { * @return the package name */ public String getPackageName() { - return packageName_; + return packageName; } /** @@ -173,7 +88,7 @@ public class GeneratedVersion { * @return the project */ public BaseProject getProject() { - return project_; + return project; } /** @@ -182,7 +97,7 @@ public class GeneratedVersion { * @return the project name */ public String getProjectName() { - return projectName_; + return projectName; } /** @@ -191,7 +106,16 @@ public class GeneratedVersion { * @return the template */ public File getTemplate() { - return template_; + return template; + } + + /** + * Sets the class file. + * + * @param classFile the class file + */ + public void setClassFile(File classFile) { + this.classFile = classFile; } /** @@ -200,7 +124,7 @@ public class GeneratedVersion { * @param className the class name */ public void setClassName(String className) { - this.className_ = className; + this.className = className; } /** @@ -209,7 +133,7 @@ public class GeneratedVersion { * @param directory the destination directory */ public void setDirectory(File directory) { - this.directory_ = directory; + this.directory = directory; } /** @@ -218,7 +142,7 @@ public class GeneratedVersion { * @param extension the file extension */ public void setExtension(String extension) { - this.extension_ = extension; + this.extension = extension; } /** @@ -227,7 +151,7 @@ public class GeneratedVersion { * @param packageName the package name */ public void setPackageName(String packageName) { - this.packageName_ = packageName; + this.packageName = packageName; } /** @@ -236,7 +160,7 @@ public class GeneratedVersion { * @param project the project */ public void setProject(BaseProject project) { - this.project_ = project; + this.project = project; } /** @@ -245,7 +169,7 @@ public class GeneratedVersion { * @param projectName the project name */ public void setProjectName(String projectName) { - this.projectName_ = projectName; + this.projectName = projectName; } /** @@ -254,31 +178,6 @@ public class GeneratedVersion { * @param template the template */ public void setTemplate(File 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); - } + this.template = template; } } diff --git a/src/main/java/rife/bld/extension/GeneratedVersionOperation.java b/src/main/java/rife/bld/extension/GeneratedVersionOperation.java index 6a5e065..484ccf0 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-2025 the original author or authors. + * 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. @@ -19,10 +19,16 @@ package rife.bld.extension; import rife.bld.BaseProject; import rife.bld.operations.AbstractOperation; -import rife.bld.operations.exceptions.ExitStatusException; +import rife.resources.ResourceFinderDirectories; +import rife.template.Template; +import rife.template.TemplateConfig; +import rife.template.TemplateFactory; +import rife.tools.FileUtils; 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; @@ -33,8 +39,119 @@ 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 final GeneratedVersion generatedVersion_ = new GeneratedVersion(); + 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", + "file://" + gv.getClassFile().toURI().getPath()}); + } + } catch (IOException e) { + if (LOGGER.isLoggable(Level.SEVERE)) { + LOGGER.log(Level.SEVERE, "Unable to write the version class file.", e); + } + } + } /** * Sets the class name. @@ -43,7 +160,7 @@ public class GeneratedVersionOperation extends AbstractOperation