From 49243568c675e696f4e26f3839f731f2d7bf361e Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Wed, 16 Aug 2023 05:17:45 -0700 Subject: [PATCH] Added method to generate a POM into a given file --- .../java/rife/bld/publish/PomBuilder.java | 15 + .../java/rife/bld/publish/TestPomBuilder.java | 984 +++++++++--------- 2 files changed, 526 insertions(+), 473 deletions(-) diff --git a/src/main/java/rife/bld/publish/PomBuilder.java b/src/main/java/rife/bld/publish/PomBuilder.java index 03908c4..3f808ad 100644 --- a/src/main/java/rife/bld/publish/PomBuilder.java +++ b/src/main/java/rife/bld/publish/PomBuilder.java @@ -7,8 +7,11 @@ package rife.bld.publish; import rife.bld.dependencies.*; import rife.template.Template; import rife.template.TemplateFactory; +import rife.tools.FileUtils; import rife.tools.StringUtils; +import rife.tools.exceptions.FileUtilsErrorException; +import java.io.File; import java.util.Objects; /** @@ -121,6 +124,18 @@ public class PomBuilder { return StringUtils.stripBlankLines(t.getContent()); } + /** + * Generates a POM into the given file. + * + * @since 1.7.1 + */ + public void generateInto(PublishInfo info, DependencyScopes dependencies, File file) + throws FileUtilsErrorException { + info_ = info; + dependencies_ = dependencies; + FileUtils.writeString(build(), file); + } + private void addDependencies(Template t, Scope scope) { var scoped_dependencies = dependencies().scope(scope); if (!scoped_dependencies.isEmpty()) { diff --git a/src/test/java/rife/bld/publish/TestPomBuilder.java b/src/test/java/rife/bld/publish/TestPomBuilder.java index b6fbca9..715979d 100644 --- a/src/test/java/rife/bld/publish/TestPomBuilder.java +++ b/src/test/java/rife/bld/publish/TestPomBuilder.java @@ -5,7 +5,14 @@ package rife.bld.publish; import org.junit.jupiter.api.Test; -import rife.bld.dependencies.*; +import rife.bld.dependencies.Dependency; +import rife.bld.dependencies.DependencyScopes; +import rife.bld.dependencies.Scope; +import rife.bld.dependencies.VersionNumber; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; import static org.junit.jupiter.api.Assertions.*; @@ -21,538 +28,569 @@ public class TestPomBuilder { void testEmptyBuild() { var builder = new PomBuilder(); assertEquals(""" - - - 4.0.0 - - - - - - - - """, builder.build()); + + + 4.0.0 + + + + + + + + """, builder.build()); } @Test void testMainInfoBuild() { var builder = new PomBuilder() - .info(new PublishInfo() - .groupId("com.example") - .artifactId("myapp") - .version(VersionNumber.parse("1.2.3-SNAPSHOT")) - .name("the thing") - .description("the thing but longer") - .url("https://the.thing")); + .info(new PublishInfo() + .groupId("com.example") + .artifactId("myapp") + .version(VersionNumber.parse("1.2.3-SNAPSHOT")) + .name("the thing") + .description("the thing but longer") + .url("https://the.thing")); assertEquals(""" - - - 4.0.0 - com.example - myapp - 1.2.3-SNAPSHOT - the thing - the thing but longer - https://the.thing - - """, builder.build()); + + + 4.0.0 + com.example + myapp + 1.2.3-SNAPSHOT + the thing + the thing but longer + https://the.thing + + """, builder.build()); } @Test void testLicensesInfoBuild() { var builder = new PomBuilder() - .info(new PublishInfo() - .license(new PublishLicense().name("license1").url("https://license1.com")) - .license(new PublishLicense().name("license2").url("https://license2.com"))); + .info(new PublishInfo() + .license(new PublishLicense().name("license1").url("https://license1.com")) + .license(new PublishLicense().name("license2").url("https://license2.com"))); assertEquals(""" - - - 4.0.0 - - - - - - - - - license1 - https://license1.com - - - license2 - https://license2.com - - - - """, builder.build()); + + + 4.0.0 + + + + + + + + + license1 + https://license1.com + + + license2 + https://license2.com + + + + """, builder.build()); + } + + @Test + void testGenerateInto() throws IOException { + var temp = File.createTempFile("rife2-pom", "xml"); + temp.deleteOnExit(); + + var deps = new DependencyScopes(); + deps.scope(Scope.compile).include(new Dependency("com.uwyn.rife2", "rife2")); + + new PomBuilder().generateInto(new PublishInfo().name("the thing"), deps, temp); + + assertEquals(""" + + + 4.0.0 + + + + the thing + + + + + com.uwyn.rife2 + rife2 + compile + + + """, String.join(System.lineSeparator(), Files.readAllLines(temp.toPath()))); } @Test void testDevelopersInfoBuild() { var builder = new PomBuilder() - .info(new PublishInfo() - .developer(new PublishDeveloper().id("id1").name("name1").email("email1").url("url1")) - .developer(new PublishDeveloper().id("id2").name("name2")) - .developer(new PublishDeveloper().id("id3").name("name3").url("url3"))); + .info(new PublishInfo() + .developer(new PublishDeveloper().id("id1").name("name1").email("email1").url("url1")) + .developer(new PublishDeveloper().id("id2").name("name2")) + .developer(new PublishDeveloper().id("id3").name("name3").url("url3"))); assertEquals(""" - - - 4.0.0 - - - - - - - - - id1 - name1 - email1 - url1 - - - id2 - name2 - + + + 4.0.0 + + + + + - - - id3 - name3 - - url3 - - - - """, builder.build()); + + + id1 + name1 + email1 + url1 + + + id2 + name2 + + + + + id3 + name3 + + url3 + + + + """, builder.build()); } @Test void testScmInfoBuild() { var builder = new PomBuilder() - .info(new PublishInfo() - .scm(new PublishScm().connection("conn1").developerConnection("devconn1").url("url1"))); + .info(new PublishInfo() + .scm(new PublishScm().connection("conn1").developerConnection("devconn1").url("url1"))); assertEquals(""" - - - 4.0.0 - - - - - - - - conn1 - devconn1 - url1 - - - """, builder.build()); + + + 4.0.0 + + + + + + + + conn1 + devconn1 + url1 + + + """, builder.build()); } @Test void testFullInfoBuild() { var builder = new PomBuilder() - .info(new PublishInfo() - .groupId("com.example") - .artifactId("myapp") - .version(VersionNumber.parse("1.2.3-SNAPSHOT")) - .name("the thing") - .description("the thing but longer") - .url("https://the.thing") - .license(new PublishLicense().name("license1").url("https://license1.com")) - .license(new PublishLicense().name("license2").url("https://license2.com")) - .developer(new PublishDeveloper().id("id1").name("name1").email("email1").url("url1")) - .developer(new PublishDeveloper().id("id2").name("name2")) - .developer(new PublishDeveloper().id("id3").name("name3").url("url3")) - .scm(new PublishScm().connection("conn1").developerConnection("devconn1").url("url1"))); + .info(new PublishInfo() + .groupId("com.example") + .artifactId("myapp") + .version(VersionNumber.parse("1.2.3-SNAPSHOT")) + .name("the thing") + .description("the thing but longer") + .url("https://the.thing") + .license(new PublishLicense().name("license1").url("https://license1.com")) + .license(new PublishLicense().name("license2").url("https://license2.com")) + .developer(new PublishDeveloper().id("id1").name("name1").email("email1").url("url1")) + .developer(new PublishDeveloper().id("id2").name("name2")) + .developer(new PublishDeveloper().id("id3").name("name3").url("url3")) + .scm(new PublishScm().connection("conn1").developerConnection("devconn1").url("url1"))); assertEquals(""" - - - 4.0.0 - com.example - myapp - 1.2.3-SNAPSHOT - the thing - the thing but longer - https://the.thing - - - license1 - https://license1.com - - - license2 - https://license2.com - - - - - id1 - name1 - email1 - url1 - - - id2 - name2 - - - - - id3 - name3 - - url3 - - - - conn1 - devconn1 - url1 - - - """, builder.build()); + + + 4.0.0 + com.example + myapp + 1.2.3-SNAPSHOT + the thing + the thing but longer + https://the.thing + + + license1 + https://license1.com + + + license2 + https://license2.com + + + + + id1 + name1 + email1 + url1 + + + id2 + name2 + + + + + id3 + name3 + + url3 + + + + conn1 + devconn1 + url1 + + + """, builder.build()); } @Test void testDependenciesCompile() { var builder = new PomBuilder(); builder.dependencies().scope(Scope.compile) - .include(new Dependency("com.uwyn.rife2", "rife2")) - .include(new Dependency("com.uwyn.rife2", "rife2", VersionNumber.UNKNOWN, "agent")) - .include(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1, 5, 5), "bld", "zip")) - .include(new Dependency("org.eclipse.jetty", "jetty-server", new VersionNumber(11, 0, 14)) - .exclude("*", "*").exclude("groupId", "artifactId")) - .include(new Dependency("org.springframework.boot", "spring-boot-starter", new VersionNumber(3, 0, 4)) - .exclude("*", "artifactId")); + .include(new Dependency("com.uwyn.rife2", "rife2")) + .include(new Dependency("com.uwyn.rife2", "rife2", VersionNumber.UNKNOWN, "agent")) + .include(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1, 5, 5), "bld", "zip")) + .include(new Dependency("org.eclipse.jetty", "jetty-server", new VersionNumber(11, 0, 14)) + .exclude("*", "*").exclude("groupId", "artifactId")) + .include(new Dependency("org.springframework.boot", "spring-boot-starter", new VersionNumber(3, 0, 4)) + .exclude("*", "artifactId")); assertEquals(""" - - - 4.0.0 - - - - - - - - - com.uwyn.rife2 - rife2 - compile - - - com.uwyn.rife2 - rife2 - agent - compile - - - com.uwyn.rife2 - rife2 - 1.5.5 - zip - bld - compile - - - org.eclipse.jetty - jetty-server - 11.0.14 - compile - - - * - * - - - groupId - artifactId - - - - - org.springframework.boot - spring-boot-starter - 3.0.4 - compile - - - * - artifactId - - - - - - """, builder.build()); + + + 4.0.0 + + + + + + + + + com.uwyn.rife2 + rife2 + compile + + + com.uwyn.rife2 + rife2 + agent + compile + + + com.uwyn.rife2 + rife2 + 1.5.5 + zip + bld + compile + + + org.eclipse.jetty + jetty-server + 11.0.14 + compile + + + * + * + + + groupId + artifactId + + + + + org.springframework.boot + spring-boot-starter + 3.0.4 + compile + + + * + artifactId + + + + + + """, builder.build()); } @Test void testDependenciesRuntime() { var builder = new PomBuilder(); builder.dependencies().scope(Scope.runtime) - .include(new Dependency("com.uwyn.rife2", "rife2")) - .include(new Dependency("com.uwyn.rife2", "rife2", VersionNumber.UNKNOWN, "agent")) - .include(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1, 5, 5), "bld", "zip")) - .include(new Dependency("org.eclipse.jetty", "jetty-server", new VersionNumber(11, 0, 14))) - .include(new Dependency("org.springframework.boot", "spring-boot-starter", new VersionNumber(3, 0, 4))); + .include(new Dependency("com.uwyn.rife2", "rife2")) + .include(new Dependency("com.uwyn.rife2", "rife2", VersionNumber.UNKNOWN, "agent")) + .include(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1, 5, 5), "bld", "zip")) + .include(new Dependency("org.eclipse.jetty", "jetty-server", new VersionNumber(11, 0, 14))) + .include(new Dependency("org.springframework.boot", "spring-boot-starter", new VersionNumber(3, 0, 4))); assertEquals(""" - - - 4.0.0 - - - - - - - - - com.uwyn.rife2 - rife2 - runtime - - - com.uwyn.rife2 - rife2 - agent - runtime - - - com.uwyn.rife2 - rife2 - 1.5.5 - zip - bld - runtime - - - org.eclipse.jetty - jetty-server - 11.0.14 - runtime - - - org.springframework.boot - spring-boot-starter - 3.0.4 - runtime - - - - """, builder.build()); + + + 4.0.0 + + + + + + + + + com.uwyn.rife2 + rife2 + runtime + + + com.uwyn.rife2 + rife2 + agent + runtime + + + com.uwyn.rife2 + rife2 + 1.5.5 + zip + bld + runtime + + + org.eclipse.jetty + jetty-server + 11.0.14 + runtime + + + org.springframework.boot + spring-boot-starter + 3.0.4 + runtime + + + + """, builder.build()); } @Test void testDependencies() { var builder = new PomBuilder(); builder.dependencies().scope(Scope.compile) - .include(new Dependency("com.uwyn.rife2", "rife2")) - .include(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1, 5, 5), "bld", "zip")) - .include(new Dependency("org.springframework.boot", "spring-boot-starter", new VersionNumber(3, 0, 4)) - .exclude("*", "artifactId")); + .include(new Dependency("com.uwyn.rife2", "rife2")) + .include(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1, 5, 5), "bld", "zip")) + .include(new Dependency("org.springframework.boot", "spring-boot-starter", new VersionNumber(3, 0, 4)) + .exclude("*", "artifactId")); builder.dependencies().scope(Scope.runtime) - .include(new Dependency("com.uwyn.rife2", "rife2", VersionNumber.UNKNOWN, "agent")) - .include(new Dependency("org.eclipse.jetty", "jetty-server", new VersionNumber(11, 0, 14)) - .exclude("*", "*").exclude("groupId", "artifactId")); + .include(new Dependency("com.uwyn.rife2", "rife2", VersionNumber.UNKNOWN, "agent")) + .include(new Dependency("org.eclipse.jetty", "jetty-server", new VersionNumber(11, 0, 14)) + .exclude("*", "*").exclude("groupId", "artifactId")); assertEquals(""" - - - 4.0.0 - - - - - - - - - com.uwyn.rife2 - rife2 - compile - - - com.uwyn.rife2 - rife2 - 1.5.5 - zip - bld - compile - - - org.springframework.boot - spring-boot-starter - 3.0.4 - compile - - - * - artifactId - - - - - com.uwyn.rife2 - rife2 - agent - runtime - - - org.eclipse.jetty - jetty-server - 11.0.14 - runtime - - - * - * - - - groupId - artifactId - - - - - - """, builder.build()); + + + 4.0.0 + + + + + + + + + com.uwyn.rife2 + rife2 + compile + + + com.uwyn.rife2 + rife2 + 1.5.5 + zip + bld + compile + + + org.springframework.boot + spring-boot-starter + 3.0.4 + compile + + + * + artifactId + + + + + com.uwyn.rife2 + rife2 + agent + runtime + + + org.eclipse.jetty + jetty-server + 11.0.14 + runtime + + + * + * + + + groupId + artifactId + + + + + + """, builder.build()); } @Test void testComplete() { var builder = new PomBuilder() - .info(new PublishInfo() - .groupId("com.example") - .artifactId("myapp") - .version(VersionNumber.parse("1.2.3-SNAPSHOT")) - .name("the thing") - .description("the thing but longer") - .url("https://the.thing") - .license(new PublishLicense().name("license1").url("https://license1.com")) - .license(new PublishLicense().name("license2").url("https://license2.com")) - .developer(new PublishDeveloper().id("id1").name("name1").email("email1").url("url1")) - .developer(new PublishDeveloper().id("id2").name("name2")) - .developer(new PublishDeveloper().id("id3").name("name3").url("url3")) - .scm(new PublishScm().connection("conn1").developerConnection("devconn1").url("url1"))); + .info(new PublishInfo() + .groupId("com.example") + .artifactId("myapp") + .version(VersionNumber.parse("1.2.3-SNAPSHOT")) + .name("the thing") + .description("the thing but longer") + .url("https://the.thing") + .license(new PublishLicense().name("license1").url("https://license1.com")) + .license(new PublishLicense().name("license2").url("https://license2.com")) + .developer(new PublishDeveloper().id("id1").name("name1").email("email1").url("url1")) + .developer(new PublishDeveloper().id("id2").name("name2")) + .developer(new PublishDeveloper().id("id3").name("name3").url("url3")) + .scm(new PublishScm().connection("conn1").developerConnection("devconn1").url("url1"))); builder.dependencies().scope(Scope.compile) - .include(new Dependency("com.uwyn.rife2", "rife2")) - .include(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1, 5, 5), "bld", "zip")) - .include(new Dependency("org.springframework.boot", "spring-boot-starter", new VersionNumber(3, 0, 4)) - .exclude("*", "artifactId")); + .include(new Dependency("com.uwyn.rife2", "rife2")) + .include(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1, 5, 5), "bld", "zip")) + .include(new Dependency("org.springframework.boot", "spring-boot-starter", new VersionNumber(3, 0, 4)) + .exclude("*", "artifactId")); builder.dependencies().scope(Scope.runtime) - .include(new Dependency("com.uwyn.rife2", "rife2", VersionNumber.UNKNOWN, "agent")) - .include(new Dependency("org.eclipse.jetty", "jetty-server", new VersionNumber(11, 0, 14)) - .exclude("*", "*").exclude("groupId", "artifactId")); + .include(new Dependency("com.uwyn.rife2", "rife2", VersionNumber.UNKNOWN, "agent")) + .include(new Dependency("org.eclipse.jetty", "jetty-server", new VersionNumber(11, 0, 14)) + .exclude("*", "*").exclude("groupId", "artifactId")); assertEquals(""" - - - 4.0.0 - com.example - myapp - 1.2.3-SNAPSHOT - the thing - the thing but longer - https://the.thing - - - license1 - https://license1.com - - - license2 - https://license2.com - - - - - com.uwyn.rife2 - rife2 - compile - - - com.uwyn.rife2 - rife2 - 1.5.5 - zip - bld - compile - - - org.springframework.boot - spring-boot-starter - 3.0.4 - compile - - - * - artifactId - - - - - com.uwyn.rife2 - rife2 - agent - runtime - - - org.eclipse.jetty - jetty-server - 11.0.14 - runtime - - - * - * - - - groupId - artifactId - - - - - - - id1 - name1 - email1 - url1 - - - id2 - name2 - - - - - id3 - name3 - - url3 - - - - conn1 - devconn1 - url1 - - - """, builder.build()); + + + 4.0.0 + com.example + myapp + 1.2.3-SNAPSHOT + the thing + the thing but longer + https://the.thing + + + license1 + https://license1.com + + + license2 + https://license2.com + + + + + com.uwyn.rife2 + rife2 + compile + + + com.uwyn.rife2 + rife2 + 1.5.5 + zip + bld + compile + + + org.springframework.boot + spring-boot-starter + 3.0.4 + compile + + + * + artifactId + + + + + com.uwyn.rife2 + rife2 + agent + runtime + + + org.eclipse.jetty + jetty-server + 11.0.14 + runtime + + + * + * + + + groupId + artifactId + + + + + + + id1 + name1 + email1 + url1 + + + id2 + name2 + + + + + id3 + name3 + + url3 + + + + conn1 + devconn1 + url1 + + + """, builder.build()); } }