19
19
import org .apache .maven .artifact .repository .MavenArtifactRepository ;
20
20
import org .gradle .api .Project ;
21
21
import org .gradle .api .attributes .Usage ;
22
+ import org .gradle .api .component .AdhocComponentWithVariants ;
23
+ import org .gradle .api .component .ConfigurationVariantDetails ;
22
24
import org .gradle .api .plugins .JavaPlugin ;
25
+ import org .gradle .api .plugins .JavaPluginConvention ;
23
26
import org .gradle .api .plugins .JavaPluginExtension ;
24
27
import org .gradle .api .publish .PublishingExtension ;
25
28
import org .gradle .api .publish .VariantVersionMappingStrategy ;
50
53
* </ul>
51
54
* </ul>
52
55
*
53
- * <p/>
54
- *
55
56
* @author Andy Wilkinson
56
57
* @author Christoph Dreis
57
58
* @author Mike Smithson
@@ -79,7 +80,9 @@ void apply(Project project) {
79
80
80
81
private void customizeMavenPublication (MavenPublication publication , Project project ) {
81
82
customizePom (publication .getPom (), project );
82
- project .getPlugins ().withType (JavaPlugin .class ).all ((javaPlugin ) -> customizeJavaMavenPublication (publication ));
83
+ project .getPlugins ().withType (JavaPlugin .class )
84
+ .all ((javaPlugin ) -> customizeJavaMavenPublication (publication , project ));
85
+ suppressMavenOptionalFeatureWarnings (publication );
83
86
}
84
87
85
88
private void customizePom (MavenPom pom , Project project ) {
@@ -97,13 +100,36 @@ private void customizePom(MavenPom pom, Project project) {
97
100
}
98
101
}
99
102
100
- private void customizeJavaMavenPublication (MavenPublication publication ) {
103
+ private void customizeJavaMavenPublication (MavenPublication publication , Project project ) {
104
+ addMavenOptionalFeature (project );
101
105
publication .versionMapping ((strategy ) -> strategy .usage (Usage .JAVA_API , (mappingStrategy ) -> mappingStrategy
102
106
.fromResolutionOf (JavaPlugin .RUNTIME_CLASSPATH_CONFIGURATION_NAME )));
103
107
publication .versionMapping (
104
108
(strategy ) -> strategy .usage (Usage .JAVA_RUNTIME , VariantVersionMappingStrategy ::fromResolutionResult ));
105
109
}
106
110
111
+ /**
112
+ * Add a feature that allows maven plugins to declare optional dependencies that
113
+ * appear in the POM. This is required to make m2e in Eclipse happy.
114
+ * @param project the project to add the feature to
115
+ */
116
+ private void addMavenOptionalFeature (Project project ) {
117
+ JavaPluginExtension extension = project .getExtensions ().getByType (JavaPluginExtension .class );
118
+ JavaPluginConvention convention = project .getConvention ().getPlugin (JavaPluginConvention .class );
119
+ extension .registerFeature ("mavenOptional" ,
120
+ (feature ) -> feature .usingSourceSet (convention .getSourceSets ().getByName ("main" )));
121
+ AdhocComponentWithVariants javaComponent = (AdhocComponentWithVariants ) project .getComponents ()
122
+ .findByName ("java" );
123
+ javaComponent .addVariantsFromConfiguration (
124
+ project .getConfigurations ().findByName ("mavenOptionalRuntimeElements" ),
125
+ ConfigurationVariantDetails ::mapToOptional );
126
+ }
127
+
128
+ private void suppressMavenOptionalFeatureWarnings (MavenPublication publication ) {
129
+ publication .suppressPomMetadataWarningsFor ("mavenOptionalApiElements" );
130
+ publication .suppressPomMetadataWarningsFor ("mavenOptionalRuntimeElements" );
131
+ }
132
+
107
133
private void customizeOrganization (MavenPomOrganization organization ) {
108
134
organization .getName ().set ("Pivotal Software, Inc." );
109
135
organization .getUrl ().set ("https://spring.io" );
0 commit comments