Skip to content

Commit 604a8c5

Browse files
authored
fix: make buildFrontend exclude dev deps (#22849)
Exclude vaadin-dev, vaadin-dev-server, vaadin-dev-bundle, copilot, flow-archive-extractor, ui-tests, gentyref, and atmosphere-runtime from the buildFrontend mojo by default. In addition, excludes com.vaadin.external.gw, com.vaadin.servletdetector, and open by default even without custom frontendScanner configuration. Fixes: #22848
1 parent 15bca07 commit 604a8c5

File tree

3 files changed

+99
-24
lines changed

3 files changed

+99
-24
lines changed

flow-plugins/flow-maven-plugin/src/main/java/com/vaadin/flow/plugin/maven/FrontendScannerConfig.java

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ public class FrontendScannerConfig {
4343

4444
static final Predicate<Artifact> DEFAULT_FILTER = withDefaults()::shouldScan;
4545

46+
static final Predicate<Artifact> DEV_EXCLUSION_FILTER = devExclusions()::shouldScan;
47+
4648
private final boolean silent;
4749

4850
private boolean enabled = true;
@@ -204,6 +206,18 @@ private static FrontendScannerConfig withDefaults() {
204206
FrontendScannerConfig out = new FrontendScannerConfig(true);
205207
out.addInclude(
206208
new FrontendScannerConfig.ArtifactMatcher("com.vaadin", "*"));
209+
setupDefaultExclusions(out);
210+
return out;
211+
}
212+
213+
private static FrontendScannerConfig devExclusions() {
214+
FrontendScannerConfig out = new FrontendScannerConfig(true);
215+
out.addInclude(new FrontendScannerConfig.ArtifactMatcher("*", "*"));
216+
setupDefaultExclusions(out);
217+
return out;
218+
}
219+
220+
private static void setupDefaultExclusions(FrontendScannerConfig out) {
207221
out.addExclude(new FrontendScannerConfig.ArtifactMatcher(
208222
"com.vaadin.external.gw", "*"));
209223
out.addExclude(new FrontendScannerConfig.ArtifactMatcher(
@@ -212,7 +226,22 @@ private static FrontendScannerConfig withDefaults() {
212226
"open"));
213227
out.addExclude(new FrontendScannerConfig.ArtifactMatcher("com.vaadin",
214228
"license-checker"));
215-
return out;
229+
out.addExclude(new FrontendScannerConfig.ArtifactMatcher("com.vaadin",
230+
"vaadin-dev"));
231+
out.addExclude(new FrontendScannerConfig.ArtifactMatcher("com.vaadin",
232+
"flow-archive-extractor"));
233+
out.addExclude(new FrontendScannerConfig.ArtifactMatcher("com.vaadin",
234+
"ui-tests"));
235+
out.addExclude(new FrontendScannerConfig.ArtifactMatcher(
236+
"com.vaadin.external", "gentyref"));
237+
out.addExclude(new FrontendScannerConfig.ArtifactMatcher(
238+
"com.vaadin.external.atmosphere", "atmosphere-runtime"));
239+
out.addExclude(new FrontendScannerConfig.ArtifactMatcher("com.vaadin",
240+
"vaadin-dev-server"));
241+
out.addExclude(new FrontendScannerConfig.ArtifactMatcher("com.vaadin",
242+
"vaadin-dev-bundle"));
243+
out.addExclude(new FrontendScannerConfig.ArtifactMatcher("com.vaadin",
244+
"copilot"));
216245
}
217246

218247
@Override

flow-plugins/flow-maven-plugin/src/main/java/com/vaadin/flow/plugin/maven/Reflector.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,7 @@ private static ReflectorClassLoader createIsolatedClassLoader(
302302
scannerConfig);
303303
}
304304
Predicate<Artifact> shouldScan = scannerConfig == null
305-
? artifact -> true
305+
? FrontendScannerConfig.DEV_EXCLUSION_FILTER
306306
: FrontendScannerConfig.DEFAULT_FILTER
307307
.or(scannerConfig::shouldScan);
308308

flow-plugins/flow-maven-plugin/src/test/java/com/vaadin/flow/plugin/maven/ReflectorTest.java

Lines changed: 68 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.net.URLClassLoader;
2323
import java.nio.file.Path;
2424
import java.util.Arrays;
25+
import java.util.HashSet;
2526
import java.util.List;
2627
import java.util.Set;
2728
import java.util.stream.Collectors;
@@ -228,10 +229,13 @@ public void reflector_frontendScannerConfigExclusions_getsFilteredIsolatedClassL
228229
scanner.addExclude(new FrontendScannerConfig.ArtifactMatcher(
229230
"com.example.addon", null));
230231

231-
Set<String> expectedArtifacts = Set.of(PROJECT_TARGET_FOLDER,
232-
"com.vaadin-vaadin-core-1.0.jar",
233-
"com.vaadin-flow-server-1.0.jar", "org.test-alpha-1.0.jar",
234-
"org.test-beta-1.0.jar");
232+
Set<String> expectedArtifacts = new HashSet<>(
233+
Set.of(PROJECT_TARGET_FOLDER, "com.vaadin-vaadin-core-1.0.jar",
234+
"com.vaadin-flow-server-1.0.jar",
235+
"org.test-alpha-1.0.jar", "org.test-beta-1.0.jar"));
236+
// FrontendScannerConfig without includes also accept
237+
// getDefaultVaadinDependencies:
238+
expectedArtifacts.addAll(getDefaultVaadinDependencies());
235239
assertThatIsolatedClassLoaderHasFilteredScanUrls(scanner,
236240
expectedArtifacts);
237241
}
@@ -302,13 +306,16 @@ public void reflector_disabledFrontendScannerConfig_getsFullIsolatedClassLoader(
302306
"com.example.addon", null));
303307
scanner.setEnabled(false);
304308

305-
Set<String> expectedArtifacts = Set.of(PROJECT_TARGET_FOLDER,
306-
"com.vaadin-vaadin-core-1.0.jar",
307-
"com.vaadin-flow-server-1.0.jar",
308-
"org.springframework.boot-spring-boot-1.0.jar",
309-
"com.example.addon-alpha-1.0.jar",
310-
"com.example.addon-beta-1.0.jar", "org.test-alpha-1.0.jar",
311-
"org.test-beta-1.0.jar");
309+
Set<String> expectedArtifacts = new HashSet<>(
310+
Set.of(PROJECT_TARGET_FOLDER, "com.vaadin-vaadin-core-1.0.jar",
311+
"com.vaadin-flow-server-1.0.jar",
312+
"org.springframework.boot-spring-boot-1.0.jar",
313+
"com.example.addon-alpha-1.0.jar",
314+
"com.example.addon-beta-1.0.jar",
315+
"org.test-alpha-1.0.jar", "org.test-beta-1.0.jar"));
316+
// disabled FrontendScannerConfig includes also accept
317+
// getDefaultVaadinDependencies:
318+
expectedArtifacts.addAll(getDefaultVaadinDependencies());
312319
assertThatIsolatedClassLoaderHasFilteredScanUrls(scanner,
313320
expectedArtifacts);
314321
}
@@ -319,27 +326,46 @@ public void reflector_excludeTargetFolder_targetFolderExcluded()
319326
FrontendScannerConfig scanner = new FrontendScannerConfig();
320327
scanner.setIncludeOutputDirectory(false);
321328

322-
Set<String> expectedArtifacts = Set.of("com.vaadin-vaadin-core-1.0.jar",
323-
"com.vaadin-flow-server-1.0.jar",
324-
"org.springframework.boot-spring-boot-1.0.jar",
325-
"com.example.addon-alpha-1.0.jar",
326-
"com.example.addon-beta-1.0.jar", "org.test-alpha-1.0.jar",
327-
"org.test-beta-1.0.jar");
329+
Set<String> expectedArtifacts = new HashSet<>(
330+
Set.of("com.vaadin-vaadin-core-1.0.jar",
331+
"com.vaadin-flow-server-1.0.jar",
332+
"org.springframework.boot-spring-boot-1.0.jar",
333+
"com.example.addon-alpha-1.0.jar",
334+
"com.example.addon-beta-1.0.jar",
335+
"org.test-alpha-1.0.jar", "org.test-beta-1.0.jar"));
336+
// FrontendScannerConfig without includes/excludes also accept
337+
// getDefaultVaadinDependencies:
338+
expectedArtifacts.addAll(getDefaultVaadinDependencies());
328339
assertThatIsolatedClassLoaderHasFilteredScanUrls(scanner,
329340
expectedArtifacts);
330341
}
331342

343+
private Set<String> getDefaultVaadinDependencies() {
344+
return Set.of("com.vaadin-open-1.0.jar",
345+
"com.vaadin-license-checker-1.0.jar",
346+
"com.vaadin-vaadin-dev-1.0.jar",
347+
"com.vaadin-vaadin-dev-server-1.0.jar",
348+
"com.vaadin-vaadin-dev-bundle-1.0.jar",
349+
"com.vaadin-copilot-1.0.jar",
350+
"com.vaadin-flow-archive-extractor-1.0.jar",
351+
"com.vaadin-ui-tests-1.0.jar",
352+
"com.vaadin.external-gentyref-1.0.jar",
353+
"com.vaadin.external.atmosphere-atmosphere-runtime-1.0.jar");
354+
}
355+
332356
private void assertThatIsolatedClassLoaderHasFilteredScanUrls(
333357
FrontendScannerConfig scannerConfig, Set<String> expectedScanURLs)
334358
throws Exception {
335359
String outputDirectory = PROJECT_TARGET_FOLDER;
336360

361+
Set<String> defaultVaadinDependencies = getDefaultVaadinDependencies();
362+
337363
MavenProject project = new MavenProject();
338364
project.setGroupId("com.vaadin.test");
339365
project.setArtifactId("reflector-tests");
340366
project.setBuild(new Build());
341367
project.getBuild().setOutputDirectory(outputDirectory);
342-
project.setArtifacts(Set.of(
368+
project.setArtifacts(new HashSet<>(Set.of(
343369
createArtifact("com.vaadin", "vaadin-core", "1.0", "compile",
344370
true),
345371
createArtifact("com.vaadin", "flow-server", "1.0", "compile",
@@ -351,9 +377,17 @@ private void assertThatIsolatedClassLoaderHasFilteredScanUrls(
351377
createArtifact("com.example.addon", "beta", "1.0", "compile",
352378
true),
353379
createArtifact("org.test", "alpha", "1.0", "compile", true),
354-
createArtifact("org.test", "beta", "1.0", "compile", true)
355-
356-
));
380+
createArtifact("org.test", "beta", "1.0", "compile", true))));
381+
for (String vaadinDep : defaultVaadinDependencies) {
382+
// create Artifact from String like
383+
// "com.vaadin.external-gentyref-1.0.jar"
384+
project.getArtifacts()
385+
.add(createArtifact(
386+
vaadinDep.substring(0, vaadinDep.indexOf("-")),
387+
vaadinDep.substring(vaadinDep.indexOf("-") + 1,
388+
vaadinDep.length() - "-1.0.jar".length()),
389+
"1.0", "compile", true));
390+
}
357391

358392
MojoExecution mojoExecution = new MojoExecution(new MojoDescriptor());
359393
PluginDescriptor pluginDescriptor = new PluginDescriptor();
@@ -380,7 +414,7 @@ private void assertThatIsolatedClassLoaderHasFilteredScanUrls(
380414
// Ensure the classloader references all dependencies
381415
Set<String> urlSet = Arrays.stream(isolatedClassLoader.getURLs())
382416
.map(URL::toExternalForm).collect(Collectors.toSet());
383-
Assert.assertEquals(9, urlSet.size());
417+
Assert.assertEquals(19, urlSet.size());
384418
Assert.assertTrue(urlSet.contains(toURLExternalForm(outputDirectory)));
385419
Assert.assertTrue(urlSet
386420
.contains(toURLExternalForm("com.vaadin-vaadin-core-1.0.jar")));
@@ -396,6 +430,9 @@ private void assertThatIsolatedClassLoaderHasFilteredScanUrls(
396430
urlSet.contains(toURLExternalForm("org.test-beta-1.0.jar")));
397431
Assert.assertTrue(urlSet.contains(
398432
toURLExternalForm("com.example.plugin-plugin-dep-1.0.jar")));
433+
for (String url : defaultVaadinDependencies) {
434+
Assert.assertTrue(urlSet.contains(toURLExternalForm(url)));
435+
}
399436

400437
// Verify scan URLs
401438
urlSet = Arrays.stream(isolatedClassLoader.getUrlsToScan())
@@ -405,6 +442,15 @@ private void assertThatIsolatedClassLoaderHasFilteredScanUrls(
405442
Assert.assertTrue("Scan URL missing in Reflector: " + expectedUrl,
406443
urlSet.contains(toURLExternalForm(expectedUrl)));
407444
}
445+
// verify default excluded URLs are indeed excluded
446+
for (String expectedExcludedUrl : defaultVaadinDependencies) {
447+
if (expectedScanURLs.contains(expectedExcludedUrl)) {
448+
continue; // already checked as included
449+
}
450+
Assert.assertFalse(
451+
"Unexpected scan URL in Reflector: " + expectedExcludedUrl,
452+
urlSet.contains(toURLExternalForm(expectedExcludedUrl)));
453+
}
408454

409455
}
410456

0 commit comments

Comments
 (0)