19
19
import org .gradle .api .Plugin ;
20
20
import org .gradle .api .Project ;
21
21
import org .gradle .api .artifacts .Configuration ;
22
- import org .gradle .api .attributes .Bundling ;
23
- import org .gradle .api .attributes .LibraryElements ;
24
22
import org .gradle .api .attributes .Usage ;
25
23
import org .gradle .api .plugins .JavaPlugin ;
26
24
import org .gradle .api .plugins .JavaPluginConvention ;
25
+ import org .gradle .api .publish .PublishingExtension ;
26
+ import org .gradle .api .publish .maven .MavenPublication ;
27
+ import org .gradle .api .publish .maven .plugins .MavenPublishPlugin ;
27
28
import org .gradle .api .tasks .SourceSetContainer ;
28
29
import org .gradle .api .tasks .javadoc .Javadoc ;
30
+ import org .gradle .plugins .ide .eclipse .EclipsePlugin ;
31
+ import org .gradle .plugins .ide .eclipse .model .EclipseModel ;
29
32
30
33
/**
31
34
* A {@code Plugin} that adds support for Maven-style optional dependencies. Creates a new
@@ -45,13 +48,26 @@ public class OptionalDependenciesPlugin implements Plugin<Project> {
45
48
@ Override
46
49
public void apply (Project project ) {
47
50
Configuration optional = project .getConfigurations ().create (OPTIONAL_CONFIGURATION_NAME );
48
- project .getConfigurations ().getByName (JavaPlugin .IMPLEMENTATION_CONFIGURATION_NAME ).extendsFrom (optional );
49
- project .getConfigurations ().getByName (JavaPlugin .COMPILE_CLASSPATH_CONFIGURATION_NAME ).extendsFrom (optional );
50
- project .getConfigurations ().getByName (JavaPlugin .RUNTIME_CLASSPATH_CONFIGURATION_NAME ).extendsFrom (optional );
51
- project .getConfigurations ().getByName (JavaPlugin .TEST_COMPILE_CLASSPATH_CONFIGURATION_NAME ).extendsFrom (optional );
52
- project .getConfigurations ().getByName (JavaPlugin .TEST_RUNTIME_CLASSPATH_CONFIGURATION_NAME ).extendsFrom (optional );
53
- project .getConfigurations ().getByName (JavaPlugin .API_ELEMENTS_CONFIGURATION_NAME ).extendsFrom (optional );
54
- project .getConfigurations ().getByName (JavaPlugin .RUNTIME_ELEMENTS_CONFIGURATION_NAME ).extendsFrom (optional );
51
+ project .getConfigurations ().all ((configuration ) -> {
52
+ if (configuration .getName ().startsWith ("testRuntimeClasspath_" )) {
53
+ configuration .extendsFrom (optional );
54
+ }
55
+ });
56
+ optional .attributes ((attributes ) -> attributes .attribute (Usage .USAGE_ATTRIBUTE ,
57
+ project .getObjects ().named (Usage .class , Usage .JAVA_RUNTIME )));
58
+ project .getPlugins ().withType (JavaPlugin .class , (javaPlugin ) -> {
59
+ SourceSetContainer sourceSets = project .getConvention ().getPlugin (JavaPluginConvention .class )
60
+ .getSourceSets ();
61
+ sourceSets .all ((sourceSet ) -> {
62
+ sourceSet .setCompileClasspath (sourceSet .getCompileClasspath ().plus (optional ));
63
+ sourceSet .setRuntimeClasspath (sourceSet .getRuntimeClasspath ().plus (optional ));
64
+ });
65
+ project .getTasks ().withType (Javadoc .class )
66
+ .all ((javadoc ) -> javadoc .setClasspath (javadoc .getClasspath ().plus (optional )));
67
+ });
68
+ project .getPlugins ().withType (EclipsePlugin .class ,
69
+ (eclipsePlugin ) -> project .getExtensions ().getByType (EclipseModel .class )
70
+ .classpath ((classpath ) -> classpath .getPlusConfigurations ().add (optional )));
55
71
}
56
72
57
73
}
0 commit comments