2929import org .eclipse .aether .artifact .DefaultArtifact ;
3030import org .eclipse .aether .collection .CollectRequest ;
3131import org .eclipse .aether .graph .Dependency ;
32+ import org .eclipse .aether .graph .DependencyFilter ;
33+ import org .eclipse .aether .graph .DependencyNode ;
3234import org .eclipse .aether .repository .RemoteRepository ;
3335import org .eclipse .aether .resolution .ArtifactRequest ;
3436import org .eclipse .aether .resolution .ArtifactResult ;
@@ -125,8 +127,10 @@ public List<ArtifactResult> apply(Artifact artifact) throws Exception {
125127 collectRequest .setRoot (new Dependency (artifact , JavaScopes .RUNTIME ));
126128 collectRequest .setRepositories (remoteRepositories );
127129
128- DependencyRequest dependencyRequest =
129- new DependencyRequest (collectRequest , DependencyFilterUtils .classpathFilter (JavaScopes .RUNTIME ));
130+ DependencyFilter filter = DependencyFilterUtils .andFilter (
131+ DependencyFilterUtils .classpathFilter (JavaScopes .RUNTIME ), FilterOptionalDependencies .INSTANCE );
132+
133+ DependencyRequest dependencyRequest = new DependencyRequest (collectRequest , filter );
130134
131135 DependencyResult result = repositorySystem .resolveDependencies (repositorySystemSession , dependencyRequest );
132136
@@ -146,4 +150,18 @@ public List<ArtifactResult> apply(Artifact artifact) throws Exception {
146150 return List .of (result );
147151 }
148152 }
153+
154+ private static class FilterOptionalDependencies implements DependencyFilter {
155+
156+ private static final FilterOptionalDependencies INSTANCE = new FilterOptionalDependencies ();
157+
158+ @ Override
159+ public boolean accept (DependencyNode node , List <DependencyNode > parents ) {
160+ boolean isOptional = node .getDependency ().isOptional ();
161+ if (isOptional ) {
162+ System .out .println (node .getDependency () + " is optional, excluding from resolution" );
163+ }
164+ return !isOptional ;
165+ }
166+ }
149167}
0 commit comments