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