43
43
44
44
import org .graalvm .buildtools .gradle .dsl .NativeImageOptions ;
45
45
import org .graalvm .buildtools .utils .NativeImageUtils ;
46
- import org .gradle .api .Project ;
47
46
import org .gradle .api .Transformer ;
47
+ import org .gradle .api .artifacts .Configuration ;
48
48
import org .gradle .api .artifacts .component .ModuleComponentIdentifier ;
49
49
import org .gradle .api .file .FileSystemLocation ;
50
50
import org .gradle .api .file .RegularFile ;
58
58
import java .util .ArrayList ;
59
59
import java .util .Collections ;
60
60
import java .util .List ;
61
+ import java .util .Set ;
61
62
import java .util .stream .Collectors ;
62
63
63
64
public class NativeImageCommandLineProvider implements CommandLineArgumentProvider {
@@ -68,20 +69,17 @@ public class NativeImageCommandLineProvider implements CommandLineArgumentProvid
68
69
private final Provider <String > outputDirectory ;
69
70
private final Provider <RegularFile > classpathJar ;
70
71
private final Provider <Boolean > useArgFile ;
71
- private final Project project ;
72
72
73
73
public NativeImageCommandLineProvider (Provider <NativeImageOptions > options ,
74
74
Provider <String > executableName ,
75
75
Provider <String > outputDirectory ,
76
76
Provider <RegularFile > classpathJar ,
77
- Provider <Boolean > useArgFile ,
78
- Project project ) {
77
+ Provider <Boolean > useArgFile ) {
79
78
this .options = options ;
80
79
this .executableName = executableName ;
81
80
this .outputDirectory = outputDirectory ;
82
81
this .classpathJar = classpathJar ;
83
82
this .useArgFile = useArgFile ;
84
- this .project = project ;
85
83
}
86
84
87
85
@ Nested
@@ -108,24 +106,32 @@ private List<String> buildExcludeConfigArgs(NativeImageOptions options) {
108
106
List <String > args = new ArrayList <>();
109
107
options .getExcludeConfig ().get ().forEach ((dependency , listOfResourcePatterns ) -> {
110
108
// Resolve jar for this dependency.
111
- project .getConfigurations ().getByName ("runtimeClasspath" ).getIncoming ().artifactView (view -> {
112
- view .setLenient (true );
113
- view .componentFilter (id -> {
114
- if (id instanceof ModuleComponentIdentifier ) {
115
- ModuleComponentIdentifier mid = (ModuleComponentIdentifier ) id ;
116
- String gav = String .format ("%s:%s" ,
117
- mid .getGroup (),
118
- mid .getModule ()
119
- );
120
- return dependency .startsWith (gav );
121
- }
122
- return false ;
123
- });
124
- }).getFiles ().forEach (jarPath -> listOfResourcePatterns .forEach (resourcePattern -> {
125
- args .add ("--exclude-config" );
126
- args .add (jarPath .toPath ().toAbsolutePath ().toString ());
127
- args .add (String .format ("\" %s\" " , resourcePattern ));
128
- }));
109
+ options .getClasspath ()
110
+ .getFrom ().stream ()
111
+ .filter (Configuration .class ::isInstance )
112
+ .map (Configuration .class ::cast )
113
+ .map (configuration -> configuration .getIncoming ().artifactView (view -> {
114
+ view .setLenient (true );
115
+ view .componentFilter (id -> {
116
+ if (id instanceof ModuleComponentIdentifier ) {
117
+ ModuleComponentIdentifier mid = (ModuleComponentIdentifier ) id ;
118
+ String gav = String .format ("%s:%s" ,
119
+ mid .getGroup (),
120
+ mid .getModule ()
121
+ );
122
+ return dependency .startsWith (gav );
123
+ }
124
+ return false ;
125
+ });
126
+ }).getFiles ().getFiles ())
127
+ .flatMap (Set ::stream ) // merge resulting sets of files
128
+ .collect (Collectors .toSet ())
129
+ .forEach (jarPath -> listOfResourcePatterns .forEach (resourcePattern -> {
130
+ args .add ("--exclude-config" );
131
+ args .add (jarPath .toPath ().toAbsolutePath ().toString ());
132
+ args .add (String .format ("\" %s\" " , resourcePattern ));
133
+ }));
134
+
129
135
});
130
136
return args ;
131
137
}
0 commit comments