Ignore @ImportAutoConfiguration exclude errors
Update `ImportAutoConfigurationImportSelector` to ignore excludes for classes that aren't loaded. Since the import classes for tests tend to be much more limited, the exception isn't really helpful. Closes gh-6809
This commit is contained in:
parent
b76978ff7e
commit
b27f4e23be
|
|
@ -161,20 +161,31 @@ public class EnableAutoConfigurationImportSelector
|
||||||
|
|
||||||
private void checkExcludedClasses(List<String> configurations,
|
private void checkExcludedClasses(List<String> configurations,
|
||||||
Set<String> exclusions) {
|
Set<String> exclusions) {
|
||||||
StringBuilder message = new StringBuilder();
|
List<String> invalidExcludes = new ArrayList<String>();
|
||||||
for (String exclusion : exclusions) {
|
for (String exclusion : exclusions) {
|
||||||
if (ClassUtils.isPresent(exclusion, getClass().getClassLoader())
|
if (ClassUtils.isPresent(exclusion, getClass().getClassLoader())
|
||||||
&& !configurations.contains(exclusion)) {
|
&& !configurations.contains(exclusion)) {
|
||||||
message.append("\t- ").append(exclusion).append(String.format("%n"));
|
invalidExcludes.add(exclusion);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!message.toString().isEmpty()) {
|
if (!invalidExcludes.isEmpty()) {
|
||||||
throw new IllegalStateException(String.format(
|
handleInvalidExcludes(invalidExcludes);
|
||||||
"The following classes could not be excluded because they are"
|
|
||||||
+ " not auto-configuration classes:%n%s",
|
|
||||||
message.toString()));
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle any invalid excludes that have been specified.
|
||||||
|
* @param invalidExcludes the list of invalid excludes (will always have at least on
|
||||||
|
* element)
|
||||||
|
*/
|
||||||
|
protected void handleInvalidExcludes(List<String> invalidExcludes) {
|
||||||
|
StringBuilder message = new StringBuilder();
|
||||||
|
for (String exclude : invalidExcludes) {
|
||||||
|
message.append("\t- ").append(exclude).append(String.format("%n"));
|
||||||
|
}
|
||||||
|
throw new IllegalStateException(String
|
||||||
|
.format("The following classes could not be excluded because they are"
|
||||||
|
+ " not auto-configuration classes:%n%s", message));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -146,4 +146,9 @@ class ImportAutoConfigurationImportSelector
|
||||||
return super.getOrder() - 1;
|
return super.getOrder() - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void handleInvalidExcludes(List<String> invalidExcludes) {
|
||||||
|
// Ignore for test
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -116,6 +116,15 @@ public class ImportAutoConfigurationImportSelectorTests {
|
||||||
assertThat(imports).containsOnly(FreeMarkerAutoConfiguration.class.getName());
|
assertThat(imports).containsOnly(FreeMarkerAutoConfiguration.class.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void exclusionsWithoutImport() throws Exception {
|
||||||
|
AnnotationMetadata annotationMetadata = new SimpleMetadataReaderFactory()
|
||||||
|
.getMetadataReader(ExclusionWithoutImport.class.getName())
|
||||||
|
.getAnnotationMetadata();
|
||||||
|
String[] imports = this.importSelector.selectImports(annotationMetadata);
|
||||||
|
assertThat(imports).containsOnly(FreeMarkerAutoConfiguration.class.getName());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void exclusionsAliasesAreApplied() throws Exception {
|
public void exclusionsAliasesAreApplied() throws Exception {
|
||||||
AnnotationMetadata annotationMetadata = new SimpleMetadataReaderFactory()
|
AnnotationMetadata annotationMetadata = new SimpleMetadataReaderFactory()
|
||||||
|
|
@ -149,6 +158,12 @@ public class ImportAutoConfigurationImportSelectorTests {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ImportOne
|
||||||
|
@ImportAutoConfiguration(exclude = ThymeleafAutoConfiguration.class)
|
||||||
|
static class ExclusionWithoutImport {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@SelfAnnotating
|
@SelfAnnotating
|
||||||
static class ImportWithSelfAnnotatingAnnotation {
|
static class ImportWithSelfAnnotatingAnnotation {
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue