diff --git a/initializr-generator/src/main/groovy/io/spring/initializr/metadata/Dependency.groovy b/initializr-generator/src/main/groovy/io/spring/initializr/metadata/Dependency.groovy
index 4b766e8d..7943eb75 100644
--- a/initializr-generator/src/main/groovy/io/spring/initializr/metadata/Dependency.groovy
+++ b/initializr-generator/src/main/groovy/io/spring/initializr/metadata/Dependency.groovy
@@ -61,6 +61,12 @@ class Dependency extends MetadataElement {
*/
String version
+ /**
+ * The type, can be {@code null} to indicate that the default type
+ * should be used (i.e. {@code jar}).
+ */
+ String type
+
/**
* Dependency mapping if an attribute of the dependency differs according to the
* Spring Boot version. If no mapping matches, default attributes are used.
diff --git a/initializr-generator/src/main/resources/templates/starter-build.gradle b/initializr-generator/src/main/resources/templates/starter-build.gradle
index 4e0d2861..27b6c92e 100644
--- a/initializr-generator/src/main/resources/templates/starter-build.gradle
+++ b/initializr-generator/src/main/resources/templates/starter-build.gradle
@@ -40,13 +40,13 @@ repositories {
}
<% } %>
dependencies {<% compileDependencies.each { %>
- compile('${it.groupId}:${it.artifactId}${it.version ? ":$it.version" : ""}')<% } %><% if (language=='groovy') { %>
+ compile('${it.groupId}:${it.artifactId}${it.version ? ":$it.version" : ""}${it.type ? "@$it.type" : ""}')<% } %><% if (language=='groovy') { %>
compile('org.codehaus.groovy:groovy')<% } %><% if (language=='kotlin') { %>
compile("org.jetbrains.kotlin:kotlin-stdlib:\${kotlinVersion}")<% } %><% runtimeDependencies.each { %>
- runtime('${it.groupId}:${it.artifactId}${it.version ? ":$it.version" : ""}')<% } %><% providedDependencies.each { %>
- providedRuntime('${it.groupId}:${it.artifactId}${it.version ? ":$it.version" : ""}')<% } %>
+ runtime('${it.groupId}:${it.artifactId}${it.version ? ":$it.version" : ""}${it.type ? "@$it.type" : ""}')<% } %><% providedDependencies.each { %>
+ providedRuntime('${it.groupId}:${it.artifactId}${it.version ? ":$it.version" : ""}${it.type ? "@$it.type" : ""}')<% } %>
testCompile('org.springframework.boot:spring-boot-starter-test') <% testDependencies.each { %>
- testCompile('${it.groupId}:${it.artifactId}${it.version ? ":$it.version" : ""}')<% } %>
+ testCompile('${it.groupId}:${it.artifactId}${it.version ? ":$it.version" : ""}${it.type ? "@$it.type" : ""}')<% } %>
}
<% if (boms) { %>
dependencyManagement {
diff --git a/initializr-generator/src/main/resources/templates/starter-pom.xml b/initializr-generator/src/main/resources/templates/starter-pom.xml
index a901c6d7..9899d74c 100644
--- a/initializr-generator/src/main/resources/templates/starter-pom.xml
+++ b/initializr-generator/src/main/resources/templates/starter-pom.xml
@@ -28,7 +28,8 @@
${it.groupId}
${it.artifactId}<% if (it.version != null) { %>
- ${it.version}<% } %>
+ ${it.version}<% } %><% if (it.type != null) { %>
+ ${it.type}<% } %>
<% } %><% if (language=='groovy') { %>
org.codehaus.groovy
@@ -44,13 +45,15 @@
${it.groupId}
${it.artifactId}<% if (it.version != null) { %>
${it.version}<% } %>
- runtime
+ runtime<% if (it.type != null) { %>
+ ${it.type}<% } %>
<% } %><% providedDependencies.each { %>
${it.groupId}
${it.artifactId}<% if (it.version != null) { %>
${it.version}<% } %>
- provided
+ provided<% if (it.type != null) { %>
+ ${it.type}<% } %>
<% } %>
org.springframework.boot
@@ -61,7 +64,8 @@
${it.groupId}
${it.artifactId}<% if (it.version != null) { %>
${it.version}<% } %>
- test
+ test<% if (it.type != null) { %>
+ ${it.type}<% } %>
<% } %>
<% if (boms) { %>
diff --git a/initializr-generator/src/test/groovy/io/spring/initializr/generator/ProjectGeneratorTests.groovy b/initializr-generator/src/test/groovy/io/spring/initializr/generator/ProjectGeneratorTests.groovy
index 367ca2f0..1c11f778 100644
--- a/initializr-generator/src/test/groovy/io/spring/initializr/generator/ProjectGeneratorTests.groovy
+++ b/initializr-generator/src/test/groovy/io/spring/initializr/generator/ProjectGeneratorTests.groovy
@@ -75,6 +75,30 @@ class ProjectGeneratorTests extends AbstractProjectGeneratorTests {
.hasSpringBootStarterDependency('web')
}
+ @Test
+ void mavenPomWithTarDependency() {
+ def dependency = new Dependency(id: 'custom-artifact', groupId: 'org.foo', artifactId: 'custom-artifact', type: "tar.gz")
+ def metadata = InitializrMetadataTestBuilder.withDefaults()
+ .addDependencyGroup('test', dependency).build()
+ applyMetadata(metadata)
+
+ def request = createProjectRequest('custom-artifact')
+ generateMavenPom(request).hasDependency(dependency)
+ .hasDependenciesCount(2)
+ }
+
+ @Test
+ void gradleBuildWithTarDependency() {
+ def dependency = new Dependency(id: 'custom-artifact', groupId: 'org.foo', artifactId: 'custom-artifact', type: "tar.gz")
+ def metadata = InitializrMetadataTestBuilder.withDefaults()
+ .addDependencyGroup('test', dependency).build()
+ applyMetadata(metadata)
+
+ def request = createProjectRequest('custom-artifact')
+ generateGradleBuild(request)
+ .contains("compile('org.foo:custom-artifact@tar.gz')")
+ }
+
@Test
void mavenPomWithWebFacet() {
def dependency = new Dependency(id: 'thymeleaf', groupId: 'org.foo', artifactId: 'thymeleaf')
diff --git a/initializr-generator/src/test/groovy/io/spring/initializr/test/generator/PomAssert.groovy b/initializr-generator/src/test/groovy/io/spring/initializr/test/generator/PomAssert.groovy
index 52bb447d..5d9fd8e6 100644
--- a/initializr-generator/src/test/groovy/io/spring/initializr/test/generator/PomAssert.groovy
+++ b/initializr-generator/src/test/groovy/io/spring/initializr/test/generator/PomAssert.groovy
@@ -146,6 +146,9 @@ class PomAssert {
if (expected.scope) {
assertEquals "Wrong scope for $dependency", expected.scope, dependency.scope
}
+ if (expected.type) {
+ assertEquals "Wrong type for $dependency", expected.type, dependency.type
+ }
this
}
@@ -238,6 +241,10 @@ class PomAssert {
if (scope.length > 0) {
dependency.scope = scope.item(0).textContent
}
+ def type = element.getElementsByTagName('type')
+ if (type.length > 0) {
+ dependency.type = type.item(0).textContent
+ }
def id = dependency.generateId()
assertFalse("Duplicate dependency with id $id", dependencies.containsKey(id))
dependencies[id] = dependency