Javadocs and tests cleanup

This commit is contained in:
Erik C. Thauvin 2023-10-31 15:39:49 -07:00
parent d00ace8b8c
commit c9fe353ce1
3 changed files with 45 additions and 33 deletions

View file

@ -95,7 +95,7 @@ public abstract class AbstractBootOperation<T extends AbstractBootOperation<T>>
} }
/** /**
* Retrieves the destination directory in which the JAR will be created. * Retrieves the destination directory in which the archive will be created.
* *
* @return the destination directory * @return the destination directory
*/ */
@ -247,7 +247,7 @@ public abstract class AbstractBootOperation<T extends AbstractBootOperation<T>>
} }
/** /**
* Part of the {@link #execute} operation, create the manifest for the jar archive. * Part of the {@link #execute} operation, create the manifest for the archive.
* *
* @param stagingDirectory the staging directory * @param stagingDirectory the staging directory
*/ */
@ -255,9 +255,9 @@ public abstract class AbstractBootOperation<T extends AbstractBootOperation<T>>
var meta_inf_dir = new File(stagingDirectory, "META-INF"); var meta_inf_dir = new File(stagingDirectory, "META-INF");
mkDirs(meta_inf_dir); mkDirs(meta_inf_dir);
var manifest = new File(meta_inf_dir, "MANIFEST.MF"); var manifest = new File(meta_inf_dir, "MANIFEST.MF").toPath();
try (var fileWriter = Files.newBufferedWriter(manifest.toPath())) { try (var fileWriter = Files.newBufferedWriter(manifest)) {
for (var manifestAttribute : manifestAttributes()) { for (var manifestAttribute : manifestAttributes()) {
fileWriter.write(manifestAttribute.name() + ": " + manifestAttribute.value() + System.lineSeparator()); fileWriter.write(manifestAttribute.name() + ": " + manifestAttribute.value() + System.lineSeparator());
} }
@ -265,19 +265,19 @@ public abstract class AbstractBootOperation<T extends AbstractBootOperation<T>>
} }
/** /**
* Provides JAR libraries that will be stored in {@code BOOT-INF} or {@code WEB-INF}. * Provides the libraries that will be stored in {@code BOOT-INF} or {@code WEB-INF}.
* *
* @param jars a list of Java archive files * @param jars a collection of Java archive files
* @return this operation instance * @return this operation instance
*/ */
public T infLibs(List<File> jars) { public T infLibs(Collection<File> jars) {
infLibs_.addAll(jars); infLibs_.addAll(jars);
//noinspection unchecked //noinspection unchecked
return (T) this; return (T) this;
} }
/** /**
* Provides JAR libraries that will be stored in {@code BOOT-INF} or {@code WEB-INF}. * Provides the libraries that will be stored in {@code BOOT-INF} or {@code WEB-INF}.
* *
* @param jar one or more Java archive file * @param jar one or more Java archive file
* @return this operation instance * @return this operation instance
@ -289,7 +289,7 @@ public abstract class AbstractBootOperation<T extends AbstractBootOperation<T>>
} }
/** /**
* Retrieves the JAR libraries in {@code BOOT-INF} or {@code WEB-INF}. * Retrieves the libraries in {@code BOOT-INF} or {@code WEB-INF}.
* *
* @return a list of Java archives * @return a list of Java archives
*/ */
@ -298,7 +298,13 @@ public abstract class AbstractBootOperation<T extends AbstractBootOperation<T>>
} }
/** /**
* Provides the JAR launcher ({@code spring-boot-loader}) fully-qualified class name. * Provides the launcher ({@code spring-boot-loader}) fully-qualified class name.
* <p>
* For examples:
* <ul>
* <li>{@code org.springframework.boot.loader.WarLauncher}</li>
* <li>{@code org.springframework.boot.loader.JarLauncher}</li>
* </ul>
* *
* @param className the launcher class name * @param className the launcher class name
* @return this operation instance * @return this operation instance
@ -310,7 +316,7 @@ public abstract class AbstractBootOperation<T extends AbstractBootOperation<T>>
} }
/** /**
* Retrieves the JAR launcher ({@code spring-boot-loader}) fully-qualified class name. * Retrieves the launcher ({@code spring-boot-loader}) fully-qualified class name.
* *
* @return the launcher class name * @return the launcher class name
*/ */
@ -323,7 +329,7 @@ public abstract class AbstractBootOperation<T extends AbstractBootOperation<T>>
} }
/** /**
* Retrieves the launcher ({@code spring-boot-loader}) JAR libraries. * Retrieves the launcher ({@code spring-boot-loader}) libraries.
* *
* @return a list of Java archives * @return a list of Java archives
*/ */
@ -332,16 +338,16 @@ public abstract class AbstractBootOperation<T extends AbstractBootOperation<T>>
} }
/** /**
* Provides the JAR libraries for the launcher ({@code spring-boot-loader}). * Provides the libraries for the launcher ({@code spring-boot-loader}).
* *
* @param jars a list of a Java archives * @param jars a collection of a Java archives
* @return this operation instance * @return this operation instance
*/ */
public T launcherLibs(List<File> jars) throws IOException { public T launcherLibs(Collection<File> jars) throws IOException {
if (!jars.isEmpty()) { if (!jars.isEmpty()) {
for (var j : jars) { for (var j : jars) {
if (!j.exists()) { if (!j.exists()) {
throw new IOException("ERROR: launcher (spring-boot-loader) JAR(s) not found: " + j); throw new IOException("ERROR: launcher (spring-boot-loader) library not found: " + j);
} }
} }
launcherLibs_.addAll(jars); launcherLibs_.addAll(jars);
@ -372,10 +378,10 @@ public abstract class AbstractBootOperation<T extends AbstractBootOperation<T>>
} }
/** /**
* Provides an attribute to put in the JAR manifest. * Provides an attribute to put in the archive manifest.
* *
* @param name the attribute name to put in the manifest * @param name the attribute name
* @param value the attribute value to put in the manifest * @param value the attribute value
* @return this operation instance * @return this operation instance
*/ */
public T manifestAttribute(String name, String value) { public T manifestAttribute(String name, String value) {
@ -385,7 +391,7 @@ public abstract class AbstractBootOperation<T extends AbstractBootOperation<T>>
} }
/** /**
* Retrieves the list of attributes that will be put in the jar manifest. * Retrieves the list of attributes that will be put in the archive manifest.
* *
* @return a list of manifest attributes * @return a list of manifest attributes
*/ */
@ -394,9 +400,9 @@ public abstract class AbstractBootOperation<T extends AbstractBootOperation<T>>
} }
/** /**
* Provides a map of attributes to put in the jar manifest. * Provides a map of attributes to put in the archive manifest.
* *
* @param attributes the attributes to put in the manifest * @param attributes the manifest attributes
* @return this operation instance * @return this operation instance
*/ */
public T manifestAttributes(Collection<BootManifestAttribute> attributes) { public T manifestAttributes(Collection<BootManifestAttribute> attributes) {
@ -406,7 +412,7 @@ public abstract class AbstractBootOperation<T extends AbstractBootOperation<T>>
} }
/** /**
* Provides source directories that will be used for the jar archive creation. * Provides source directories that will be used for the archive creation.
* *
* @param directories one or more source directory * @param directories one or more source directory
* @return this operation instance * @return this operation instance
@ -418,7 +424,7 @@ public abstract class AbstractBootOperation<T extends AbstractBootOperation<T>>
} }
/** /**
* Retrieves the source directories that will be used for the jar archive creation. * Retrieves the source directories that will be used for the archive creation.
* *
* @return a list of directories * @return a list of directories
*/ */
@ -427,7 +433,8 @@ public abstract class AbstractBootOperation<T extends AbstractBootOperation<T>>
} }
/** /**
* Verifies that all the elements required to create the archived have been provided, throws an * 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
* {@link IllegalArgumentException} otherwise. * {@link IllegalArgumentException} otherwise.
* *
* @return {@code true} or an {@link IllegalArgumentException} * @return {@code true} or an {@link IllegalArgumentException}
@ -439,7 +446,7 @@ public abstract class AbstractBootOperation<T extends AbstractBootOperation<T>>
} else if (launcherClass().isEmpty()) { } else if (launcherClass().isEmpty()) {
throw new IllegalArgumentException(("ERROR: launcher (spring-boot-loader) class required")); throw new IllegalArgumentException(("ERROR: launcher (spring-boot-loader) class required"));
} else if (launcherLibs().isEmpty()) { } else if (launcherLibs().isEmpty()) {
throw new IllegalArgumentException(("ERROR: launcher (spring-boot-loader) JAR(s) required")); throw new IllegalArgumentException(("ERROR: launcher (spring-boot-loader) libraries required"));
} }
return true; return true;
} }

View file

@ -66,7 +66,7 @@ public class BootWarOperation extends AbstractBootOperation<BootWarOperation> {
} }
/** /**
* Part of the {@link #execute} operation, copy the {@code WEB-INF/lib-provided} libs. * Part of the {@link #execute} operation, copy the {@code WEB-INF/lib-provided} libraries.
* *
* @param stagingWebInfDirectory the staging {@code WEB-INF/lib-provided} directory * @param stagingWebInfDirectory the staging {@code WEB-INF/lib-provided} directory
*/ */
@ -121,7 +121,7 @@ public class BootWarOperation extends AbstractBootOperation<BootWarOperation> {
} }
/** /**
* Provides JAR libraries that will be used for the WAR creation in {@code /WEB-INF/lib-provided}. * Provides libraries that will be used for the WAR creation in {@code /WEB-INF/lib-provided}.
* *
* @param jars a collection of Java archive files * @param jars a collection of Java archive files
* @return this operation instance * @return this operation instance
@ -132,7 +132,7 @@ public class BootWarOperation extends AbstractBootOperation<BootWarOperation> {
} }
/** /**
* Provides the JAR libraries that will be used for the WAR creation in {@code /WEB-INF/lib-provided}. * Provides the libraries that will be used for the WAR creation in {@code /WEB-INF/lib-provided}.
* *
* @param jar one or more Java archive file * @param jar one or more Java archive file
* @return this operation instance * @return this operation instance

View file

@ -36,6 +36,7 @@ import static org.assertj.core.api.Assertions.assertThatCode;
class BootJarOperationTest { class BootJarOperationTest {
private static final String BLD = "bld-1.7.5.jar"; private static final String BLD = "bld-1.7.5.jar";
private static final String EXAMPLES_LIB_COMPILE = "examples/lib/compile/"; 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/"; private static final String EXAMPLES_LIB_STANDALONE = "examples/lib/standalone/";
private static final String LAUNCHER_JARS = """ private static final String LAUNCHER_JARS = """
org/ org/
@ -114,6 +115,7 @@ class BootJarOperationTest {
org/springframework/boot/loader/util/SystemPropertyUtils.class org/springframework/boot/loader/util/SystemPropertyUtils.class
"""; """;
private static final String MAIN_CLASS = "com.example.Foo"; 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.1.5.jar"; private static final String SPRING_BOOT = "spring-boot-3.1.5.jar";
private static final String SPRING_BOOT_ACTUATOR = "spring-boot-actuator-3.1.5.jar"; private static final String SPRING_BOOT_ACTUATOR = "spring-boot-actuator-3.1.5.jar";
private static final String SPRING_BOOT_LOADER = "spring-boot-loader-3.1.5.jar"; private static final String SPRING_BOOT_LOADER = "spring-boot-loader-3.1.5.jar";
@ -227,7 +229,7 @@ class BootJarOperationTest {
@Test @Test
void testProject() throws IOException { void testProject() throws IOException {
var tmp_dir = Files.createTempDirectory("bootjartmp").toFile(); var tmp_dir = Files.createTempDirectory("bootprjtmp").toFile();
var project = new CustomProject(tmp_dir); var project = new CustomProject(tmp_dir);
var bootJar = new BootJarOperation().fromProject(project); var bootJar = new BootJarOperation().fromProject(project);
@ -255,15 +257,17 @@ class BootJarOperationTest {
@Test @Test
void testWarProjectExecute() throws Exception { void testWarProjectExecute() throws Exception {
var tmp_dir = Files.createTempDirectory("bootjartmp").toFile(); var tmp_dir = Files.createTempDirectory("bootjartmp").toFile();
var project = new CustomProject(new File("."));
new BootWarOperation() new BootWarOperation()
.fromProject(new CustomProject(new File("."))) .fromProject(project)
.launcherLibs(List.of(new File(EXAMPLES_LIB_STANDALONE + SPRING_BOOT_LOADER))) .launcherLibs(List.of(new File(EXAMPLES_LIB_STANDALONE + SPRING_BOOT_LOADER)))
.destinationDirectory(tmp_dir) .destinationDirectory(tmp_dir)
.infLibs(new File(EXAMPLES_LIB_COMPILE + SPRING_BOOT), .infLibs(new File(EXAMPLES_LIB_COMPILE + SPRING_BOOT),
new File(EXAMPLES_LIB_COMPILE + SPRING_BOOT_ACTUATOR)) new File(EXAMPLES_LIB_COMPILE + SPRING_BOOT_ACTUATOR))
.providedLibs(new File(EXAMPLES_LIB_RUNTIME + PROVIDED_LIB))
.execute(); .execute();
var warFile = new File(tmp_dir, "test_project-0.0.1-boot.war"); var warFile = new File(tmp_dir, project.name() + '-' + project.version().toString() + "-boot.war");
assertThat(warFile).exists(); assertThat(warFile).exists();
var jarEntries = readJarEntries(warFile); var jarEntries = readJarEntries(warFile);
@ -284,7 +288,8 @@ class BootJarOperationTest {
"WEB-INF/lib/dist/\n" + "WEB-INF/lib/dist/\n" +
"WEB-INF/lib/" + SPRING_BOOT + '\n' + "WEB-INF/lib/" + SPRING_BOOT + '\n' +
"WEB-INF/lib/" + SPRING_BOOT_ACTUATOR + '\n' + "WEB-INF/lib/" + SPRING_BOOT_ACTUATOR + '\n' +
"WEB-INF/lib-provided/\n" + LAUNCHER_JARS); "WEB-INF/lib-provided/\n" +
"WEB-INF/lib-provided/" + PROVIDED_LIB + '\n' + LAUNCHER_JARS);
FileUtils.deleteDirectory(tmp_dir); FileUtils.deleteDirectory(tmp_dir);
} }