Skip to content

Commit d83c953

Browse files
authored
feat: publish maven central plugin (#358)
* feat: add publishToMavenRepo plugin * apply publishToMavenCentral only when project is meant to be published * add task dependency * avoid duplicated publication
1 parent 1b48806 commit d83c953

File tree

12 files changed

+36
-111
lines changed

12 files changed

+36
-111
lines changed

build.gradle.kts

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,4 @@ allprojects {
3535
}
3636
}
3737

38-
// FIXME - workaround for https://github.com/gradle/gradle/issues/26091
39-
val signingTasks = tasks.withType<Sign>()
40-
tasks.withType<AbstractPublishToMaven>().configureEach {
41-
mustRunAfter(signingTasks)
42-
}
4338
}

buildSrc/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ repositories {
2121

2222
dependencies {
2323

24-
implementation(libs.plugin.nexus.publish)
2524
implementation(libs.plugin.checksum)
25+
implementation(libs.plugin.publish)
2626
implementation(libs.plugin.swagger)
2727
implementation(libs.plugin.openapi.merger) {
2828
constraints {

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ jetbrains-annotations = { module = "org.jetbrains:annotations", version.ref = "j
2727
jupiter-engine = { module = "org.junit.jupiter:junit-jupiter-engine", version.ref = "jupiter" }
2828
markdown-gen = { module = "net.steppschuh.markdowngenerator:markdowngenerator", version = "1.3.1.1" }
2929
mockito-core = { module = "org.mockito:mockito-core", version.ref = "mockito" }
30+
plugin-publish = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.34.0" }
3031
plugin-checksum = { module = "gradle.plugin.org.gradle.crypto:checksum", version = "1.4.0" }
31-
plugin-nexus-publish = { module = "io.github.gradle-nexus:publish-plugin", version = "2.0.0" }
3232
plugin-openapi-merger = { module = "com.rameshkp:openapi-merger-gradle-plugin", version.ref = "openapi-merger" }
3333
plugin-openapi-merger-app = { module = "com.rameshkp:openapi-merger-app", version.ref = "openapi-merger" }
3434
plugin-swagger = { module = "io.swagger.core.v3:swagger-gradle-plugin", version.ref = "swagger" }

plugins/edc-build/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ repositories {
1010
}
1111

1212
dependencies {
13-
implementation(libs.plugin.nexus.publish)
1413
implementation(libs.plugin.checksum)
14+
implementation(libs.plugin.publish)
1515
implementation(libs.plugin.swagger)
1616
implementation(libs.plugin.openapi.merger.app)
1717
implementation(libs.plugin.openapi.merger) {

plugins/edc-build/src/main/java/org/eclipse/edc/plugins/edcbuild/EdcBuildBasePlugin.java

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414

1515
package org.eclipse.edc.plugins.edcbuild;
1616

17-
import io.github.gradlenexus.publishplugin.NexusPublishPlugin;
1817
import org.eclipse.edc.plugins.edcbuild.plugins.ModuleNamesPlugin;
1918
import org.eclipse.edc.plugins.edcbuild.plugins.OpenApiMergerPlugin;
2019
import org.eclipse.edc.plugins.edcbuild.plugins.TestSummaryPlugin;
@@ -32,26 +31,22 @@
3231
* @see <a href="https://docs.gradle.org/current/userguide/designing_gradle_plugins.html">Gradle Documentation</a>
3332
*/
3433
public class EdcBuildBasePlugin implements Plugin<Project> {
35-
private static void defineCapabilities(Project target) {
3634

37-
target.getPlugins().apply(JavaLibraryPlugin.class);
38-
target.getPlugins().apply(CheckstylePlugin.class);
39-
target.getPlugins().apply(MavenPublishPlugin.class);
40-
target.getPlugins().apply(JavaPlugin.class);
41-
target.getPlugins().apply(TestSummaryPlugin.class);
35+
@Override
36+
public void apply(Project target) {
37+
var plugins = target.getPlugins();
38+
39+
plugins.apply(CheckstylePlugin.class);
40+
plugins.apply(JavaLibraryPlugin.class);
41+
plugins.apply(JavaPlugin.class);
42+
plugins.apply(MavenPublishPlugin.class);
43+
plugins.apply(TestSummaryPlugin.class);
4244

43-
// The nexus publish plugin MUST be applied to the root project only, it'll throw an exception otherwise
4445
if (target == target.getRootProject()) {
45-
target.getPlugins().apply(ChecksumPlugin.class);
46-
target.getPlugins().apply(NexusPublishPlugin.class);
47-
target.getPlugins().apply(OpenApiMergerPlugin.class);
48-
target.getPlugins().apply(ModuleNamesPlugin.class);
46+
plugins.apply(ChecksumPlugin.class);
47+
plugins.apply(OpenApiMergerPlugin.class);
48+
plugins.apply(ModuleNamesPlugin.class);
4949
}
5050
}
5151

52-
@Override
53-
public void apply(Project target) {
54-
defineCapabilities(target);
55-
}
56-
5752
}

plugins/edc-build/src/main/java/org/eclipse/edc/plugins/edcbuild/EdcBuildPlugin.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
import org.eclipse.edc.plugins.edcbuild.extensions.BuildExtension;
1919
import org.gradle.api.Plugin;
2020
import org.gradle.api.Project;
21+
import org.gradle.api.publish.maven.tasks.AbstractPublishToMaven;
22+
import org.gradle.plugins.signing.Sign;
2123

2224
import static java.util.List.of;
2325
import static org.eclipse.edc.plugins.edcbuild.conventions.Conventions.allDependencies;
@@ -28,7 +30,6 @@
2830
import static org.eclipse.edc.plugins.edcbuild.conventions.Conventions.mavenPom;
2931
import static org.eclipse.edc.plugins.edcbuild.conventions.Conventions.mavenPublication;
3032
import static org.eclipse.edc.plugins.edcbuild.conventions.Conventions.mavenPublishing;
31-
import static org.eclipse.edc.plugins.edcbuild.conventions.Conventions.nexusPublishing;
3233
import static org.eclipse.edc.plugins.edcbuild.conventions.Conventions.printClasspath;
3334
import static org.eclipse.edc.plugins.edcbuild.conventions.Conventions.repositories;
3435
import static org.eclipse.edc.plugins.edcbuild.conventions.Conventions.rootBuildScript;
@@ -49,8 +50,10 @@ public void apply(Project target) {
4950
// apply all plugins
5051
target.getPlugins().apply(EdcBuildBasePlugin.class);
5152

52-
//this one must run in the configuration phase
53-
nexusPublishing().apply(target);
53+
target.getTasks().withType(AbstractPublishToMaven.class).configureEach(task -> {
54+
var signTasks = target.getTasks().withType(Sign.class);
55+
task.mustRunAfter(signTasks);
56+
});
5457

5558
// configuration values are only guaranteed to be set after the project has been evaluated
5659
// https://docs.gradle.org/current/userguide/build_lifecycle.html

plugins/edc-build/src/main/java/org/eclipse/edc/plugins/edcbuild/conventions/Conventions.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,6 @@ public static EdcConvention jar() {
5959
return new JarConvention();
6060
}
6161

62-
public static EdcConvention nexusPublishing() {
63-
return new NexusPublishingConvention();
64-
}
65-
6662
public static EdcConvention rootBuildScript() {
6763
return new RootBuildScriptConvention();
6864
}

plugins/edc-build/src/main/java/org/eclipse/edc/plugins/edcbuild/conventions/JavaConvention.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,6 @@ public void apply(Project target) {
4747
options.setFork(true);
4848
options.setIncremental(true);
4949
});
50-
51-
52-
// needed for publishing to maven central
53-
javaPluginExt.withJavadocJar();
54-
javaPluginExt.withSourcesJar();
5550
}
5651

5752
}

plugins/edc-build/src/main/java/org/eclipse/edc/plugins/edcbuild/conventions/MavenArtifactConvention.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@ class MavenArtifactConvention implements EdcConvention {
4343
public void apply(Project target) {
4444
target.afterEvaluate(project -> {
4545
var pubExt = requireExtension(project, PublishingExtension.class);
46-
var pomExt = requireExtension(project, BuildExtension.class).getPom();
46+
var buildExtension = requireExtension(project, BuildExtension.class);
47+
var pomExt = buildExtension.getPom();
4748

4849
pubExt.getPublications().stream()
4950
.filter(p -> p instanceof MavenPublication)

plugins/edc-build/src/main/java/org/eclipse/edc/plugins/edcbuild/conventions/MavenPublicationConvention.java

Lines changed: 11 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -14,53 +14,37 @@
1414

1515
package org.eclipse.edc.plugins.edcbuild.conventions;
1616

17+
import com.vanniktech.maven.publish.MavenPublishBaseExtension;
18+
import com.vanniktech.maven.publish.MavenPublishPlugin;
1719
import org.eclipse.edc.plugins.edcbuild.extensions.BuildExtension;
1820
import org.gradle.api.Project;
19-
import org.gradle.api.publish.PublishingExtension;
20-
import org.gradle.api.publish.maven.MavenPublication;
2121

2222
import static org.eclipse.edc.plugins.edcbuild.conventions.ConventionFunctions.requireExtension;
2323

24-
/**
25-
* Adds a Maven publication to a project.
26-
*/
2724
public class MavenPublicationConvention implements EdcConvention {
2825

29-
/**
30-
* Default setting for publication of a project.
31-
*/
3226
private static final boolean DEFAULT_SHOULD_PUBLISH = true;
3327

34-
/**
35-
* Checks whether publishing is explicitly set to false for the target project and, if it is
36-
* not, adds a Maven publication to the project, if none exists. This only applies for
37-
* sub-projects that contain a build.gradle.kts file.
38-
*
39-
* @param target The project to which the convention applies
40-
*/
4128
@Override
4229
public void apply(Project target) {
4330
// do not publish the root project or modules without a build.gradle.kts
4431
if (target.getRootProject() == target || !target.file("build.gradle.kts").exists()) {
4532
return;
4633
}
4734

48-
var buildExt = requireExtension(target, BuildExtension.class);
49-
var shouldPublish = buildExt.getPublish().getOrElse(DEFAULT_SHOULD_PUBLISH);
35+
var buildExtension = requireExtension(target, BuildExtension.class);
36+
var shouldPublish = buildExtension.getPublish().getOrElse(DEFAULT_SHOULD_PUBLISH);
5037

5138
if (shouldPublish) {
52-
var pe = requireExtension(target, PublishingExtension.class);
39+
target.getPlugins().apply(MavenPublishPlugin.class);
40+
41+
target.getExtensions().configure(MavenPublishBaseExtension.class, extension -> {
42+
extension.publishToMavenCentral(true);
5343

54-
if (pe.getPublications().findByName(target.getName()) == null) {
55-
pe.publications(publications -> publications.create(target.getName(), MavenPublication.class,
56-
mavenPublication -> {
57-
mavenPublication.from(target.getComponents().getByName("java"));
58-
mavenPublication.setGroupId(buildExt.getPom().getGroupId());
59-
mavenPublication.suppressPomMetadataWarningsFor("testFixturesApiElements");
60-
mavenPublication.suppressPomMetadataWarningsFor("testFixturesRuntimeElements");
61-
}));
62-
}
44+
extension.signAllPublications();
45+
});
6346
}
47+
6448
}
6549

6650
}

0 commit comments

Comments
 (0)