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());
}
}