Made AbstractBootOperation more generic
This commit is contained in:
parent
b4282b2b73
commit
700bf84b34
5 changed files with 39 additions and 285 deletions
|
@ -39,12 +39,8 @@ public class DemoApplicationBuild extends WebProject {
|
|||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
var level = Level.FINER;
|
||||
var consoleHandler = new ConsoleHandler();
|
||||
consoleHandler.setLevel(level);
|
||||
var logger = Logger.getLogger(BootJarOperation.class.getName());
|
||||
logger.addHandler(consoleHandler);
|
||||
logger.setLevel(level);
|
||||
var logger = Logger.getLogger("rife.bld.extension");
|
||||
logger.setLevel(Level.FINER);
|
||||
|
||||
new DemoApplicationBuild().start(args);
|
||||
}
|
||||
|
|
|
@ -16,7 +16,6 @@
|
|||
|
||||
package rife.bld.extension;
|
||||
|
||||
import rife.bld.Project;
|
||||
import rife.bld.operations.AbstractOperation;
|
||||
import rife.tools.FileUtils;
|
||||
import rife.tools.exceptions.FileUtilsErrorException;
|
||||
|
@ -35,13 +34,14 @@ import java.util.logging.Logger;
|
|||
import java.util.spi.ToolProvider;
|
||||
|
||||
/**
|
||||
* Implements commons methods used by Spring Boot operations, such as {@link BootJarOperation} and
|
||||
* Implements common methods used by Spring Boot operations, such as {@link BootJarOperation} and
|
||||
* {@link BootWarOperation}.
|
||||
*
|
||||
* @author <a href="https://erik.thauvin.net/">Erik C. Thauvin</a>
|
||||
* @since 1.0
|
||||
*/
|
||||
public abstract class AbstractBootOperation extends AbstractOperation<AbstractBootOperation> {
|
||||
public abstract class AbstractBootOperation<T extends AbstractBootOperation<T>>
|
||||
extends AbstractOperation<AbstractBootOperation<T>> {
|
||||
private final List<File> infLibs_ = new ArrayList<>();
|
||||
private final List<File> launcherJars_ = new ArrayList<>();
|
||||
private final List<BootManifestAttribute> manifestAttributes_ = new ArrayList<>();
|
||||
|
@ -50,7 +50,6 @@ public abstract class AbstractBootOperation extends AbstractOperation<AbstractBo
|
|||
private File destinationDirectory_;
|
||||
private String launcherClass_;
|
||||
private String mainClass_;
|
||||
private Project project_;
|
||||
|
||||
public void deleteDirectories(File... directory) throws FileUtilsErrorException {
|
||||
for (var d : directory) {
|
||||
|
@ -66,9 +65,10 @@ public abstract class AbstractBootOperation extends AbstractOperation<AbstractBo
|
|||
* @param name the archive file name
|
||||
* @return this operation instance
|
||||
*/
|
||||
public AbstractBootOperation destinationArchiveFileName(String name) {
|
||||
public T destinationArchiveFileName(String name) {
|
||||
destinationArchiveFileName = name;
|
||||
return this;
|
||||
//noinspection unchecked
|
||||
return (T) this;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -95,10 +95,11 @@ public abstract class AbstractBootOperation extends AbstractOperation<AbstractBo
|
|||
* @param directory the destination directory
|
||||
* @return this operation instance
|
||||
*/
|
||||
public AbstractBootOperation destinationDirectory(File directory) throws IOException {
|
||||
public T destinationDirectory(File directory) throws IOException {
|
||||
destinationDirectory_ = directory;
|
||||
mkDirs(destinationDirectory_);
|
||||
return this;
|
||||
//noinspection unchecked
|
||||
return (T) this;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -209,9 +210,10 @@ public abstract class AbstractBootOperation extends AbstractOperation<AbstractBo
|
|||
* @param jars Java archive files
|
||||
* @return this operation instance
|
||||
*/
|
||||
public AbstractBootOperation infLibs(List<File> jars) {
|
||||
public T infLibs(List<File> jars) {
|
||||
infLibs_.addAll(jars);
|
||||
return this;
|
||||
//noinspection unchecked
|
||||
return (T) this;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -220,9 +222,10 @@ public abstract class AbstractBootOperation extends AbstractOperation<AbstractBo
|
|||
* @param jar Java archive file
|
||||
* @return this operation instance
|
||||
*/
|
||||
public AbstractBootOperation infLibs(File... jar) {
|
||||
public T infLibs(File... jar) {
|
||||
infLibs_.addAll(List.of(jar));
|
||||
return this;
|
||||
//noinspection unchecked
|
||||
return (T) this;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -235,9 +238,10 @@ public abstract class AbstractBootOperation extends AbstractOperation<AbstractBo
|
|||
/**
|
||||
* Part of the {@link #execute} operation, configure the JAR launcher ({@code spring-boot-loader}) class name.
|
||||
*/
|
||||
public AbstractBootOperation launcherClass(String className) {
|
||||
public T launcherClass(String className) {
|
||||
launcherClass_ = className;
|
||||
return this;
|
||||
//noinspection unchecked
|
||||
return (T) this;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -261,7 +265,7 @@ public abstract class AbstractBootOperation extends AbstractOperation<AbstractBo
|
|||
/**
|
||||
* Part of the {@link #execute} operation, configure the launcher ({@code spring-boot-loader}) JAR location.
|
||||
*/
|
||||
public AbstractBootOperation launcherJars(List<File> jars) throws IOException {
|
||||
public T launcherJars(List<File> jars) throws IOException {
|
||||
if (!jars.isEmpty()) {
|
||||
for (var j : jars) {
|
||||
if (!j.exists()) {
|
||||
|
@ -270,15 +274,17 @@ public abstract class AbstractBootOperation extends AbstractOperation<AbstractBo
|
|||
}
|
||||
launcherJars_.addAll(jars);
|
||||
}
|
||||
return this;
|
||||
//noinspection unchecked
|
||||
return (T) this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides the fully-qualified main class name.
|
||||
*/
|
||||
protected AbstractBootOperation mainClass(String className) {
|
||||
protected T mainClass(String className) {
|
||||
mainClass_ = className;
|
||||
return this;
|
||||
//noinspection unchecked
|
||||
return (T) this;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -295,9 +301,10 @@ public abstract class AbstractBootOperation extends AbstractOperation<AbstractBo
|
|||
* @param value the attribute value to put in the manifest
|
||||
* @return this operation instance
|
||||
*/
|
||||
public AbstractBootOperation manifestAttribute(String name, String value) {
|
||||
public T manifestAttribute(String name, String value) {
|
||||
manifestAttributes_.add(new BootManifestAttribute(name, value));
|
||||
return this;
|
||||
//noinspection unchecked
|
||||
return (T) this;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -315,9 +322,10 @@ public abstract class AbstractBootOperation extends AbstractOperation<AbstractBo
|
|||
* @param attributes the attributes to put in the manifest
|
||||
* @return this operation instance
|
||||
*/
|
||||
public AbstractBootOperation manifestAttributes(Collection<BootManifestAttribute> attributes) {
|
||||
public T manifestAttributes(Collection<BootManifestAttribute> attributes) {
|
||||
manifestAttributes_.addAll(attributes);
|
||||
return this;
|
||||
//noinspection unchecked
|
||||
return (T) this;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -329,30 +337,16 @@ public abstract class AbstractBootOperation extends AbstractOperation<AbstractBo
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides the bld project.
|
||||
*/
|
||||
public AbstractBootOperation project(Project project) {
|
||||
project_ = project;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the bld project.
|
||||
*/
|
||||
public Project project() {
|
||||
return project_;
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides source directories that will be used for the jar archive creation.
|
||||
*
|
||||
* @param directories source directories
|
||||
* @return this operation instance
|
||||
*/
|
||||
public AbstractBootOperation sourceDirectories(File... directories) {
|
||||
public T sourceDirectories(File... directories) {
|
||||
sourceDirectories_.addAll(List.of(directories));
|
||||
return this;
|
||||
//noinspection unchecked
|
||||
return (T) this;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -22,7 +22,6 @@ import rife.tools.FileUtils;
|
|||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
@ -33,121 +32,9 @@ import java.util.logging.Logger;
|
|||
* @author <a href="https://erik.thauvin.net/">Erik C. Thauvin</a>
|
||||
* @since 1.0
|
||||
*/
|
||||
public class BootJarOperation extends AbstractBootOperation {
|
||||
public class BootJarOperation extends AbstractBootOperation<BootJarOperation> {
|
||||
private static final Logger LOGGER = Logger.getLogger(BootJarOperation.class.getName());
|
||||
|
||||
/**
|
||||
* Provides the destination file name that will be used for the JAR creation.
|
||||
*
|
||||
* @param name the JAR destination file name
|
||||
* @return this operation instance
|
||||
*/
|
||||
@Override
|
||||
public BootJarOperation destinationArchiveFileName(String name) {
|
||||
return (BootJarOperation) super.destinationArchiveFileName(name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides the destination directory in which the JAR will be created.
|
||||
*
|
||||
* @param directory the JAR destination directory
|
||||
* @return this operation instance
|
||||
*/
|
||||
@Override
|
||||
public BootJarOperation destinationDirectory(File directory) throws IOException {
|
||||
return (BootJarOperation) super.destinationDirectory(directory);
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides JAR libraries that will be used for the JAR creation.
|
||||
*
|
||||
* @param jars Java archive files
|
||||
* @return this operation instance
|
||||
*/
|
||||
@Override
|
||||
public BootJarOperation infLibs(List<File> jars) {
|
||||
return (BootJarOperation) super.infLibs(jars);
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides JAR libraries that will be used for the JAR creation.
|
||||
*
|
||||
* @param jar Java archive file
|
||||
* @return this operation instance
|
||||
*/
|
||||
@Override
|
||||
public BootJarOperation infLibs(File... jar) {
|
||||
return (BootJarOperation) super.infLibs(jar);
|
||||
}
|
||||
|
||||
/**
|
||||
* Part of the {@link #execute} operation, configure the JAR launcher ({@code spring-boot-loader}) class.
|
||||
*/
|
||||
@Override
|
||||
public BootJarOperation launcherClass(String className) {
|
||||
return (BootJarOperation) super.launcherClass(className);
|
||||
}
|
||||
|
||||
/**
|
||||
* Part of the {@link #execute} operation, configure the launcher ({@code spring-boot-loader}) JAR(s).
|
||||
*/
|
||||
@Override
|
||||
public BootJarOperation launcherJars(List<File> jars) throws IOException {
|
||||
return (BootJarOperation) super.launcherJars(jars);
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides the fully-qualified main class name.
|
||||
*/
|
||||
@Override
|
||||
public BootJarOperation mainClass(String className) {
|
||||
return (BootJarOperation) super.mainClass(className);
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides an attribute to put in the JAR manifest.
|
||||
*
|
||||
* @param name the attribute name to put in the manifest
|
||||
* @param value the attribute value to put in the manifest
|
||||
* @return this operation instance
|
||||
*/
|
||||
@Override
|
||||
public BootJarOperation manifestAttribute(String name, String value) {
|
||||
return (BootJarOperation) super.manifestAttribute(name, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides a map of attributes to put in the jar manifest.
|
||||
* <p>
|
||||
* A copy will be created to allow this map to be independently modifiable.
|
||||
*
|
||||
* @param attributes the attributes to put in the manifest
|
||||
* @return this operation instance
|
||||
*/
|
||||
@Override
|
||||
public BootJarOperation manifestAttributes(Collection<BootManifestAttribute> attributes) {
|
||||
return (BootJarOperation) super.manifestAttributes(attributes);
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides the bld project.
|
||||
*/
|
||||
@Override
|
||||
public BootJarOperation project(Project project) {
|
||||
return (BootJarOperation) super.project(project);
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides source directories that will be used for the jar archive creation.
|
||||
*
|
||||
* @param directories source directories
|
||||
* @return this operation instance
|
||||
*/
|
||||
@Override
|
||||
public BootJarOperation sourceDirectories(File... directories) {
|
||||
return (BootJarOperation) super.sourceDirectories(directories);
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs the BootJar operation.
|
||||
*/
|
||||
|
@ -174,7 +61,6 @@ public class BootJarOperation extends AbstractBootOperation {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Part of the {@link #execute} operation, creates the {@code BOOT-INF} staging directory.
|
||||
*/
|
||||
|
@ -188,7 +74,6 @@ public class BootJarOperation extends AbstractBootOperation {
|
|||
* Configures the operation from a {@link Project}.
|
||||
*/
|
||||
public BootJarOperation fromProject(Project project) throws IOException {
|
||||
project(project);
|
||||
mainClass(project.mainClass());
|
||||
|
||||
return destinationDirectory(project.buildDistDirectory())
|
||||
|
|
|
@ -34,122 +34,10 @@ import java.util.logging.Logger;
|
|||
* @author <a href="https://erik.thauvin.net/">Erik C. Thauvin</a>
|
||||
* @since 1.0
|
||||
*/
|
||||
public class BootWarOperation extends AbstractBootOperation {
|
||||
public class BootWarOperation extends AbstractBootOperation<BootWarOperation> {
|
||||
private static final Logger LOGGER = Logger.getLogger(BootWarOperation.class.getName());
|
||||
private final List<File> webInfProvidedLibs_ = new ArrayList<>();
|
||||
|
||||
/**
|
||||
* Provides the destination file name that will be used for the WAR creation.
|
||||
*
|
||||
* @param name the wAR archive destination file name
|
||||
* @return this operation instance
|
||||
*/
|
||||
@Override
|
||||
public BootWarOperation destinationArchiveFileName(String name) {
|
||||
return (BootWarOperation) super.destinationArchiveFileName(name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides the destination directory in which the WAR will be created.
|
||||
*
|
||||
* @param directory the WAR destination directory
|
||||
* @return this operation instance
|
||||
*/
|
||||
@Override
|
||||
public BootWarOperation destinationDirectory(File directory) throws IOException {
|
||||
return (BootWarOperation) super.destinationDirectory(directory);
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides JAR libraries that will be used for the WAR creation.
|
||||
*
|
||||
* @param jars Java archive files
|
||||
* @return this operation instance
|
||||
*/
|
||||
@Override
|
||||
public BootWarOperation infLibs(List<File> jars) {
|
||||
return (BootWarOperation) super.infLibs(jars);
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides JAR libraries that will be used for the WAR creation.
|
||||
*
|
||||
* @param jar Java archive file
|
||||
* @return this operation instance
|
||||
*/
|
||||
@Override
|
||||
public BootWarOperation infLibs(File... jar) {
|
||||
return (BootWarOperation) super.infLibs(jar);
|
||||
}
|
||||
|
||||
/**
|
||||
* Part of the {@link #execute} operation, configure the JAR launcher ({@code spring-boot-loader}) class.
|
||||
*/
|
||||
@Override
|
||||
public BootWarOperation launcherClass(String className) {
|
||||
return (BootWarOperation) super.launcherClass(className);
|
||||
}
|
||||
|
||||
/**
|
||||
* Part of the {@link #execute} operation, configure the launcher ({@code spring-boot-loader}) JAR(s).
|
||||
*/
|
||||
@Override
|
||||
public BootWarOperation launcherJars(List<File> jars) throws IOException {
|
||||
return (BootWarOperation) super.launcherJars(jars);
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides the fully-qualified main class name.
|
||||
*/
|
||||
@Override
|
||||
public BootWarOperation mainClass(String className) {
|
||||
return (BootWarOperation) super.mainClass(className);
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides an attribute to put in the JAR manifest.
|
||||
*
|
||||
* @param name the attribute name to put in the manifest
|
||||
* @param value the attribute value to put in the manifest
|
||||
* @return this operation instance
|
||||
*/
|
||||
@Override
|
||||
public BootWarOperation manifestAttribute(String name, String value) {
|
||||
return (BootWarOperation) super.manifestAttribute(name, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides a map of attributes to put in the jar manifest.
|
||||
* <p>
|
||||
* A copy will be created to allow this map to be independently modifiable.
|
||||
*
|
||||
* @param attributes the attributes to put in the manifest
|
||||
* @return this operation instance
|
||||
*/
|
||||
@Override
|
||||
public BootWarOperation manifestAttributes(Collection<BootManifestAttribute> attributes) {
|
||||
return (BootWarOperation) super.manifestAttributes(attributes);
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides the bld project.
|
||||
*/
|
||||
@Override
|
||||
public BootWarOperation project(Project project) {
|
||||
return (BootWarOperation) super.project(project);
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides source directories that will be used for the jar archive creation.
|
||||
*
|
||||
* @param directories source directories
|
||||
* @return this operation instance
|
||||
*/
|
||||
@Override
|
||||
public BootWarOperation sourceDirectories(File... directories) {
|
||||
return (BootWarOperation) super.sourceDirectories(directories);
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs the BootJar operation.
|
||||
*/
|
||||
|
@ -204,7 +92,6 @@ public class BootWarOperation extends AbstractBootOperation {
|
|||
* @param project the project to configure the operation from
|
||||
*/
|
||||
public BootWarOperation fromProject(Project project) throws IOException {
|
||||
project(project);
|
||||
mainClass(project.mainClass());
|
||||
|
||||
return destinationDirectory(project.buildDistDirectory())
|
||||
|
@ -224,7 +111,6 @@ public class BootWarOperation extends AbstractBootOperation {
|
|||
.sourceDirectories(project.buildMainDirectory(), project.srcMainResourcesDirectory());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Provides JAR libraries that will be used for the WAR creation in {@code /WEB-INF/lib-provided}.
|
||||
*
|
||||
|
|
|
@ -177,9 +177,7 @@ class BootJarOperationTest {
|
|||
"BOOT-INF/classes/rife/\n" +
|
||||
"BOOT-INF/classes/rife/bld/\n" +
|
||||
"BOOT-INF/classes/rife/bld/extension/\n" +
|
||||
"BOOT-INF/classes/rife/bld/extension/AbstractBootOperation$ManifestAttribute.class\n" +
|
||||
"BOOT-INF/classes/rife/bld/extension/AbstractBootOperation.class\n" +
|
||||
"BOOT-INF/classes/rife/bld/extension/BootJarOperation$ManifestAttribute.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/BootWarOperation.class\n" +
|
||||
|
@ -187,7 +185,7 @@ class BootJarOperationTest {
|
|||
"BOOT-INF/lib/" + SPRING_BOOT + '\n' +
|
||||
"BOOT-INF/lib/" + SPRING_BOOT_ACTUATOR + '\n' +
|
||||
"META-INF/\n" +
|
||||
"META-INF/MANIFEST.MF" + LAUNCHER_JARS);
|
||||
"META-INF/MANIFEST.MF\n" + LAUNCHER_JARS);
|
||||
|
||||
FileUtils.deleteDirectory(tmp_dir);
|
||||
}
|
||||
|
@ -213,9 +211,7 @@ class BootJarOperationTest {
|
|||
"BOOT-INF/classes/rife/\n" +
|
||||
"BOOT-INF/classes/rife/bld/\n" +
|
||||
"BOOT-INF/classes/rife/bld/extension/\n" +
|
||||
"BOOT-INF/classes/rife/bld/extension/AbstractBootOperation$ManifestAttribute.class\n" +
|
||||
"BOOT-INF/classes/rife/bld/extension/AbstractBootOperation.class\n" +
|
||||
"BOOT-INF/classes/rife/bld/extension/BootJarOperation$ManifestAttribute.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/BootWarOperation.class\n" +
|
||||
|
@ -224,7 +220,7 @@ class BootJarOperationTest {
|
|||
"BOOT-INF/lib/" + SPRING_BOOT + '\n' +
|
||||
"BOOT-INF/lib/" + SPRING_BOOT_ACTUATOR + '\n' +
|
||||
"META-INF/\n" +
|
||||
"META-INF/MANIFEST.MF" + LAUNCHER_JARS);
|
||||
"META-INF/MANIFEST.MF\n" + LAUNCHER_JARS);
|
||||
|
||||
FileUtils.deleteDirectory(tmp_dir);
|
||||
}
|
||||
|
@ -235,7 +231,6 @@ class BootJarOperationTest {
|
|||
var project = new CustomProject(tmp_dir);
|
||||
var bootJar = new BootJarOperation().fromProject(project);
|
||||
|
||||
assertThat(bootJar.project()).as("project").isEqualTo(project);
|
||||
assertThat(bootJar.mainClass()).as("mainClass").isEqualTo(MAIN_CLASS);
|
||||
assertThat(bootJar.sourceDirectories()).as("sourceDirectories.size").hasSize(2);
|
||||
assertThat(bootJar.manifestAttributes()).as("manifestAttributes.size").hasSize(3);
|
||||
|
@ -280,9 +275,7 @@ class BootJarOperationTest {
|
|||
"WEB-INF/classes/rife/\n" +
|
||||
"WEB-INF/classes/rife/bld/\n" +
|
||||
"WEB-INF/classes/rife/bld/extension/\n" +
|
||||
"WEB-INF/classes/rife/bld/extension/AbstractBootOperation$ManifestAttribute.class\n" +
|
||||
"WEB-INF/classes/rife/bld/extension/AbstractBootOperation.class\n" +
|
||||
"WEB-INF/classes/rife/bld/extension/BootJarOperation$ManifestAttribute.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/BootWarOperation.class\n" +
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue