From ec87ca3ace83c2fb92520f3c8eb430e63f5f33bf Mon Sep 17 00:00:00 2001 From: Madhura Bhave Date: Tue, 3 Jul 2018 14:32:15 -0700 Subject: [PATCH] Support annotationProcessor scope Fixes gh-653 --- .../generator/ProjectGenerator.java | 2 + .../initializr/metadata/Dependency.java | 11 +++- .../resources/templates/starter-build.gradle | 3 + .../main/resources/templates/starter-pom.xml | 13 ++++ .../generator/ProjectGeneratorBuildTests.java | 18 ++++++ ...tion-processor-dependency-build.gradle.gen | 33 +++++++++++ ...nnotation-processor-dependency-pom.xml.gen | 59 +++++++++++++++++++ 7 files changed, 136 insertions(+), 3 deletions(-) create mode 100644 initializr-generator/src/test/resources/project/gradle/annotation-processor-dependency-build.gradle.gen create mode 100644 initializr-generator/src/test/resources/project/maven/annotation-processor-dependency-pom.xml.gen diff --git a/initializr-generator/src/main/java/io/spring/initializr/generator/ProjectGenerator.java b/initializr-generator/src/main/java/io/spring/initializr/generator/ProjectGenerator.java index ad488301..21d86952 100644 --- a/initializr-generator/src/main/java/io/spring/initializr/generator/ProjectGenerator.java +++ b/initializr-generator/src/main/java/io/spring/initializr/generator/ProjectGenerator.java @@ -404,6 +404,8 @@ public class ProjectGenerator { filterDependencies(dependencies, Dependency.SCOPE_RUNTIME)); model.put("compileOnlyDependencies", filterDependencies(dependencies, Dependency.SCOPE_COMPILE_ONLY)); + model.put("annotationProcessorDependencies", + filterDependencies(dependencies, Dependency.SCOPE_ANNOTATION_PROCESSOR)); model.put("providedDependencies", filterDependencies(dependencies, Dependency.SCOPE_PROVIDED)); model.put("testDependencies", diff --git a/initializr-generator/src/main/java/io/spring/initializr/metadata/Dependency.java b/initializr-generator/src/main/java/io/spring/initializr/metadata/Dependency.java index 0eff3f42..c0ee0d14 100644 --- a/initializr-generator/src/main/java/io/spring/initializr/metadata/Dependency.java +++ b/initializr-generator/src/main/java/io/spring/initializr/metadata/Dependency.java @@ -50,6 +50,11 @@ public class Dependency extends MetadataElement implements Describable { */ public static final String SCOPE_COMPILE_ONLY = "compileOnly"; + /** + * Annotation Processor Scope. + */ + public static final String SCOPE_ANNOTATION_PROCESSOR = "annotationProcessor"; + /** * Runtime Scope. */ @@ -68,9 +73,9 @@ public class Dependency extends MetadataElement implements Describable { /** * All scope types. */ - public static final List SCOPE_ALL = Collections - .unmodifiableList(Arrays.asList(SCOPE_COMPILE, SCOPE_RUNTIME, - SCOPE_COMPILE_ONLY, SCOPE_PROVIDED, SCOPE_TEST)); + public static final List SCOPE_ALL = Collections.unmodifiableList( + Arrays.asList(SCOPE_COMPILE, SCOPE_RUNTIME, SCOPE_COMPILE_ONLY, + SCOPE_ANNOTATION_PROCESSOR, SCOPE_PROVIDED, SCOPE_TEST)); private List aliases = new ArrayList<>(); diff --git a/initializr-generator/src/main/resources/templates/starter-build.gradle b/initializr-generator/src/main/resources/templates/starter-build.gradle index e4382fcd..59850a25 100644 --- a/initializr-generator/src/main/resources/templates/starter-build.gradle +++ b/initializr-generator/src/main/resources/templates/starter-build.gradle @@ -98,6 +98,9 @@ dependencies { {{#compileOnlyDependencies}} compileOnly('{{groupId}}:{{artifactId}}{{#version}}:{{version}}{{/version}}{{#type}}@{{type}}{{/type}}') {{/compileOnlyDependencies}} + {{#annotationProcessorDependencies}} + annotationProcessor('{{groupId}}:{{artifactId}}{{#version}}:{{version}}{{/version}}{{#type}}@{{type}}{{/type}}') + {{/annotationProcessorDependencies}} {{#providedDependencies}} providedRuntime('{{groupId}}:{{artifactId}}{{#version}}:{{version}}{{/version}}{{#type}}@{{type}}{{/type}}') {{/providedDependencies}} diff --git a/initializr-generator/src/main/resources/templates/starter-pom.xml b/initializr-generator/src/main/resources/templates/starter-pom.xml index 1bd0fd99..5636da6e 100644 --- a/initializr-generator/src/main/resources/templates/starter-pom.xml +++ b/initializr-generator/src/main/resources/templates/starter-pom.xml @@ -89,6 +89,19 @@ {{/type}} {{/compileOnlyDependencies}} + {{#annotationProcessorDependencies}} + + {{groupId}} + {{artifactId}} + {{#version}} + {{version}} + {{/version}} + true + {{#type}} + {{type}} + {{/type}} + + {{/annotationProcessorDependencies}} {{#providedDependencies}} {{groupId}} diff --git a/initializr-generator/src/test/java/io/spring/initializr/generator/ProjectGeneratorBuildTests.java b/initializr-generator/src/test/java/io/spring/initializr/generator/ProjectGeneratorBuildTests.java index 19ae0679..4a0afeb2 100755 --- a/initializr-generator/src/test/java/io/spring/initializr/generator/ProjectGeneratorBuildTests.java +++ b/initializr-generator/src/test/java/io/spring/initializr/generator/ProjectGeneratorBuildTests.java @@ -143,6 +143,24 @@ public class ProjectGeneratorBuildTests extends AbstractProjectGeneratorTests { + this.build + "/compile-only-dependency-" + this.assertFileName)); } + @Test + public void annotationProcessorDependency() { + Dependency annotationProcessor = Dependency.withId("configuration-processor", + "org.springframework.boot", "spring-boot-configuration-processor"); + annotationProcessor.setScope(Dependency.SCOPE_ANNOTATION_PROCESSOR); + InitializrMetadata metadata = InitializrMetadataTestBuilder.withDefaults() + .addDependencyGroup("core", "web", "data-jpa") + .addDependencyGroup("configuration-processor", annotationProcessor) + .build(); + applyMetadata(metadata); + ProjectRequest request = createProjectRequest("configuration-processor", "web", + "data-jpa"); + ProjectAssert project = generateProject(request); + project.sourceCodeAssert(this.fileName) + .equalsTo(new ClassPathResource("project/" + this.build + + "/annotation-processor-dependency-" + this.assertFileName)); + } + @Test public void bomWithOrdering() { Dependency foo = Dependency.withId("foo", "org.acme", "foo"); diff --git a/initializr-generator/src/test/resources/project/gradle/annotation-processor-dependency-build.gradle.gen b/initializr-generator/src/test/resources/project/gradle/annotation-processor-dependency-build.gradle.gen new file mode 100644 index 00000000..ac406d15 --- /dev/null +++ b/initializr-generator/src/test/resources/project/gradle/annotation-processor-dependency-build.gradle.gen @@ -0,0 +1,33 @@ +buildscript { + ext { + springBootVersion = '1.2.3.RELEASE' + } + repositories { + mavenCentral() + } + dependencies { + classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") + classpath('io.spring.gradle:dependency-management-plugin:0.5.1.RELEASE') + } +} + +apply plugin: 'java' +apply plugin: 'eclipse' +apply plugin: 'spring-boot' +apply plugin: 'io.spring.dependency-management' + +group = 'com.example' +version = '0.0.1-SNAPSHOT' +sourceCompatibility = 1.8 + +repositories { + mavenCentral() +} + + +dependencies { + compile('org.springframework.boot:spring-boot-starter-data-jpa') + compile('org.springframework.boot:spring-boot-starter-web') + annotationProcessor('org.springframework.boot:spring-boot-configuration-processor') + testCompile('org.springframework.boot:spring-boot-starter-test') +} diff --git a/initializr-generator/src/test/resources/project/maven/annotation-processor-dependency-pom.xml.gen b/initializr-generator/src/test/resources/project/maven/annotation-processor-dependency-pom.xml.gen new file mode 100644 index 00000000..2e59098d --- /dev/null +++ b/initializr-generator/src/test/resources/project/maven/annotation-processor-dependency-pom.xml.gen @@ -0,0 +1,59 @@ + + + 4.0.0 + + com.example + demo + 0.0.1-SNAPSHOT + jar + + demo + Demo project for Spring Boot + + + org.springframework.boot + spring-boot-starter-parent + 1.2.3.RELEASE + + + + + UTF-8 + UTF-8 + 1.8 + + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-configuration-processor + true + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + +