-
Notifications
You must be signed in to change notification settings - Fork 24.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix multi jar publishing #32195
Fix multi jar publishing #32195
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -19,18 +19,14 @@ | |
package org.elasticsearch.gradle.plugin | ||
|
||
import com.github.jengelman.gradle.plugins.shadow.ShadowPlugin | ||
import nebula.plugin.info.scm.ScmInfoPlugin | ||
import groovy.xml.XmlUtil | ||
import org.elasticsearch.gradle.BuildPlugin | ||
import org.elasticsearch.gradle.NoticeTask | ||
import org.elasticsearch.gradle.test.RestIntegTestTask | ||
import org.elasticsearch.gradle.test.RunTask | ||
import org.gradle.api.InvalidUserDataException | ||
import org.gradle.api.JavaVersion | ||
import org.gradle.api.Project | ||
import org.gradle.api.Task | ||
import org.gradle.api.XmlProvider | ||
import org.gradle.api.publish.maven.MavenPublication | ||
import org.gradle.api.publish.maven.plugins.MavenPublishPlugin | ||
import org.gradle.api.tasks.SourceSet | ||
import org.gradle.api.tasks.bundling.Zip | ||
|
||
|
@@ -69,16 +65,16 @@ public class PluginBuildPlugin extends BuildPlugin { | |
String name = project.pluginProperties.extension.name | ||
project.archivesBaseName = name | ||
|
||
// while the jar isn't normally published, we still at least build a pom of deps | ||
// in case it is published, for instance when other plugins extend this plugin | ||
configureJarPom(project) | ||
|
||
if (project.pluginProperties.extension.hasClientJar) { | ||
// for plugins which work with the transport client, we copy the jar | ||
// file to a new name, copy the nebula generated pom to the same name, | ||
// and generate a different pom for the zip | ||
addClientJarPomGeneration(project) | ||
addClientJarTask(project) | ||
} | ||
// while the jar isn't normally published, we still at least build a pom of deps | ||
// in case it is published, for instance when other plugins extend this plugin | ||
configureJarPom(project) | ||
|
||
project.integTestCluster.dependsOn(project.bundlePlugin) | ||
project.tasks.run.dependsOn(project.bundlePlugin) | ||
|
@@ -169,21 +165,42 @@ public class PluginBuildPlugin extends BuildPlugin { | |
project.artifacts.add('zip', bundle) | ||
} | ||
|
||
/** Find the reponame. */ | ||
static String urlFromOrigin(String origin) { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is this still used? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. yes, by a build script at distribution/archives/build.gradle we could probably have that use nebula and clean it up, but didn't want to get into that now. |
||
if (origin == null) { | ||
return null // best effort, the url doesnt really matter, it is just required by maven central | ||
} | ||
if (origin.startsWith('https')) { | ||
return origin | ||
} | ||
Matcher matcher = GIT_PATTERN.matcher(origin) | ||
if (matcher.matches()) { | ||
return "https://${matcher.group(1)}/${matcher.group(2)}" | ||
} else { | ||
return origin // best effort, the url doesnt really matter, it is just required by maven central | ||
} | ||
} | ||
|
||
static final Pattern GIT_PATTERN = Pattern.compile(/git@([^:]+):([^\.]+)\.git/) | ||
|
||
/** Adds a task to move jar and associated files to a "-client" name. */ | ||
protected static void addClientJarTask(Project project) { | ||
Task clientJar = project.tasks.create('clientJar') | ||
clientJar.dependsOn(project.jar, project.tasks.generatePomFileForClientJarPublication, project.javadocJar, project.sourcesJar) | ||
clientJar.dependsOn(project.jar, project.tasks.generatePomFileForNebulaPublication, project.javadocJar, project.sourcesJar) | ||
clientJar.doFirst { | ||
Path jarFile = project.jar.outputs.files.singleFile.toPath() | ||
String clientFileName = jarFile.fileName.toString().replace(project.version, "client-${project.version}") | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It'd be nice if this were declare an output. I know it didn't have it before though. |
||
Files.copy(jarFile, jarFile.resolveSibling(clientFileName), StandardCopyOption.REPLACE_EXISTING) | ||
|
||
// We need to change the artifact name in the nebula pom | ||
String clientPomFileName = clientFileName.replace('.jar', '.pom') | ||
Files.copy( | ||
project.tasks.generatePomFileForClientJarPublication.outputs.files.singleFile.toPath(), | ||
jarFile.resolveSibling(clientPomFileName), | ||
StandardCopyOption.REPLACE_EXISTING | ||
) | ||
Node pom = new XmlParser() | ||
.parse(project.tasks.generatePomFileForNebulaPublication.outputs.files.singleFile) | ||
pom.artifactId[0].value = project.name + "-client" | ||
jarFile.resolveSibling(clientPomFileName).toFile().text = XmlUtil.serialize(pom) | ||
// Groovy has an odd way of formatting the XML, fix it up3 | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. extra |
||
.replaceAll(/\n\s*\n/, "\n") | ||
.replace("\"UTF-8\"?><project", "\"UTF-8\"?>\n<project"); | ||
|
||
String sourcesFileName = jarFile.fileName.toString().replace('.jar', '-sources.jar') | ||
String clientSourcesFileName = clientFileName.replace('.jar', '-sources.jar') | ||
|
@@ -198,58 +215,11 @@ public class PluginBuildPlugin extends BuildPlugin { | |
project.assemble.dependsOn(clientJar) | ||
} | ||
|
||
static final Pattern GIT_PATTERN = Pattern.compile(/git@([^:]+):([^\.]+)\.git/) | ||
|
||
/** Find the reponame. */ | ||
static String urlFromOrigin(String origin) { | ||
if (origin == null) { | ||
return null // best effort, the url doesnt really matter, it is just required by maven central | ||
} | ||
if (origin.startsWith('https')) { | ||
return origin | ||
} | ||
Matcher matcher = GIT_PATTERN.matcher(origin) | ||
if (matcher.matches()) { | ||
return "https://${matcher.group(1)}/${matcher.group(2)}" | ||
} else { | ||
return origin // best effort, the url doesnt really matter, it is just required by maven central | ||
} | ||
} | ||
|
||
/** Adds nebula publishing task to generate a pom file for the plugin. */ | ||
protected static void addClientJarPomGeneration(Project project) { | ||
project.plugins.apply(MavenPublishPlugin.class) | ||
|
||
project.publishing { | ||
publications { | ||
clientJar(MavenPublication) { | ||
from project.components.java | ||
artifactId = project.pluginProperties.extension.name + '-client' | ||
pom.withXml { XmlProvider xml -> | ||
Node root = xml.asNode() | ||
root.appendNode('name', project.pluginProperties.extension.name) | ||
root.appendNode('description', project.pluginProperties.extension.description) | ||
root.appendNode('url', urlFromOrigin(project.scminfo.origin)) | ||
Node scmNode = root.appendNode('scm') | ||
scmNode.appendNode('url', project.scminfo.origin) | ||
} | ||
} | ||
} | ||
} | ||
} | ||
|
||
/** Configure the pom for the main jar of this plugin */ | ||
protected static void configureJarPom(Project project) { | ||
project.plugins.apply(ScmInfoPlugin.class) | ||
project.plugins.apply(MavenPublishPlugin.class) | ||
|
||
project.publishing { | ||
publications { | ||
nebula(MavenPublication) { | ||
artifactId project.pluginProperties.extension.name | ||
} | ||
} | ||
} | ||
project.plugins.apply(nebula.plugin.publishing.maven.MavenScmPlugin.class) | ||
// have the nebula plugin set the correct description | ||
project.description = project.pluginProperties.extension.description | ||
} | ||
|
||
protected void addNoticeGeneration(Project project) { | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -23,6 +23,7 @@ | |
* fix the hack in the build framework that copies transport-netty4 into the integ test cluster | ||
* maybe figure out a way to run all tests from core with netty4/network? | ||
*/ | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Probably worth reverting this one. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Git annotate says these were added by @jasontedor, I'm happy to help with it. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I misread this to mean "revisiting" and taught it's about the TODO above ... will revert |
||
esplugin { | ||
description 'Netty 4 based transport implementation' | ||
classname 'org.elasticsearch.transport.Netty4Plugin' | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we should mention x-pack-core here explicitly.