Refine additional metadata detection logic
Update the additional metadata detection logic to deal with Gradle folder layouts. Fixes gh-2271
This commit is contained in:
parent
735b96dd0f
commit
64b9066661
|
|
@ -16,6 +16,10 @@
|
||||||
|
|
||||||
package org.springframework.boot.configurationprocessor;
|
package org.springframework.boot.configurationprocessor;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
|
@ -75,6 +79,10 @@ public class ConfigurationMetadataAnnotationProcessor extends AbstractProcessor
|
||||||
|
|
||||||
static final String LOMBOK_SETTER_ANNOTATION = "lombok.Setter";
|
static final String LOMBOK_SETTER_ANNOTATION = "lombok.Setter";
|
||||||
|
|
||||||
|
private static final String RESOURCES_FOLDER = "resources";
|
||||||
|
|
||||||
|
private static final String CLASSES_FOLDER = "classes";
|
||||||
|
|
||||||
private ConfigurationMetadata metadata;
|
private ConfigurationMetadata metadata;
|
||||||
|
|
||||||
private TypeUtils typeUtils;
|
private TypeUtils typeUtils;
|
||||||
|
|
@ -316,7 +324,7 @@ public class ConfigurationMetadataAnnotationProcessor extends AbstractProcessor
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void writeMetaData(ConfigurationMetadata metadata) {
|
protected void writeMetaData(ConfigurationMetadata metadata) {
|
||||||
metadata = mergeManualMetadata(metadata);
|
metadata = mergeAdditionalMetadata(metadata);
|
||||||
if (!metadata.getItems().isEmpty()) {
|
if (!metadata.getItems().isEmpty()) {
|
||||||
try {
|
try {
|
||||||
FileObject resource = this.processingEnv.getFiler().createResource(
|
FileObject resource = this.processingEnv.getFiler().createResource(
|
||||||
|
|
@ -336,12 +344,9 @@ public class ConfigurationMetadataAnnotationProcessor extends AbstractProcessor
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private ConfigurationMetadata mergeManualMetadata(ConfigurationMetadata metadata) {
|
private ConfigurationMetadata mergeAdditionalMetadata(ConfigurationMetadata metadata) {
|
||||||
try {
|
try {
|
||||||
FileObject manualMetadata = this.processingEnv.getFiler().createResource(
|
InputStream inputStream = getAdditionalMetadata();
|
||||||
StandardLocation.CLASS_OUTPUT, "",
|
|
||||||
"META-INF/additional-spring-configuration-metadata.json");
|
|
||||||
InputStream inputStream = manualMetadata.toUri().toURL().openStream();
|
|
||||||
try {
|
try {
|
||||||
ConfigurationMetadata merged = new ConfigurationMetadata(metadata);
|
ConfigurationMetadata merged = new ConfigurationMetadata(metadata);
|
||||||
try {
|
try {
|
||||||
|
|
@ -356,12 +361,34 @@ public class ConfigurationMetadataAnnotationProcessor extends AbstractProcessor
|
||||||
inputStream.close();
|
inputStream.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
catch (FileNotFoundException ex) {
|
||||||
|
// No additional metadata
|
||||||
|
return metadata;
|
||||||
|
}
|
||||||
catch (Exception ex) {
|
catch (Exception ex) {
|
||||||
logWarning("Unable to merge additional-spring-configuration-metadata.json");
|
logWarning("Unable to merge additional-spring-configuration-metadata.json");
|
||||||
return metadata;
|
return metadata;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private InputStream getAdditionalMetadata() throws IOException {
|
||||||
|
// Most build systems will have copied the file to the class output location
|
||||||
|
FileObject fileObject = this.processingEnv.getFiler().createResource(
|
||||||
|
StandardLocation.CLASS_OUTPUT, "",
|
||||||
|
"META-INF/additional-spring-configuration-metadata.json");
|
||||||
|
File file = new File(fileObject.toUri());
|
||||||
|
if (!file.exists()) {
|
||||||
|
// Gradle keeps things separate
|
||||||
|
String path = file.getPath();
|
||||||
|
int index = path.lastIndexOf(CLASSES_FOLDER);
|
||||||
|
path = path.substring(0, index) + RESOURCES_FOLDER
|
||||||
|
+ path.substring(index + CLASSES_FOLDER.length());
|
||||||
|
file = new File(path);
|
||||||
|
}
|
||||||
|
return (file.exists() ? new FileInputStream(file) : fileObject.toUri().toURL()
|
||||||
|
.openStream());
|
||||||
|
}
|
||||||
|
|
||||||
private void logWarning(String msg) {
|
private void logWarning(String msg) {
|
||||||
this.processingEnv.getMessager().printMessage(Kind.WARNING, msg);
|
this.processingEnv.getMessager().printMessage(Kind.WARNING, msg);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue