2
0
Fork 0
mirror of https://github.com/ethauvin/rife2-hello.git synced 2025-04-25 07:27:12 -07:00

Merge pull request #3 from melix/cc/publishing-compatibility

Add support for publishing the fat jar
This commit is contained in:
Geert Bevin 2023-02-22 08:21:50 -05:00 committed by GitHub
commit 834c75492b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 61 additions and 8 deletions

View file

@ -4,17 +4,25 @@ import org.gradle.api.tasks.testing.logging.TestLogEvent
plugins {
application
id("com.uwyn.rife2")
`maven-publish`
}
base {
archivesName.set("hello")
version = 1.0
group = "com.example"
}
application {
mainClass.set("hello.App")
}
java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(17))
}
}
repositories {
// Use Maven Central for resolving dependencies.
mavenCentral()
@ -44,3 +52,17 @@ tasks {
}
}
}
publishing {
repositories {
maven {
name = "Build"
url = uri(rootProject.layout.buildDirectory.dir("repo"))
}
}
publications {
create<MavenPublication>("maven") {
from(components["java"])
}
}
}

View file

@ -20,6 +20,11 @@ import org.gradle.api.Project;
import org.gradle.api.artifacts.Configuration;
import org.gradle.api.artifacts.ConfigurationContainer;
import org.gradle.api.artifacts.dsl.DependencyHandler;
import org.gradle.api.attributes.Attribute;
import org.gradle.api.attributes.AttributeContainer;
import org.gradle.api.attributes.Bundling;
import org.gradle.api.component.AdhocComponentWithVariants;
import org.gradle.api.component.ConfigurationVariantDetails;
import org.gradle.api.file.DuplicatesStrategy;
import org.gradle.api.plugins.BasePluginExtension;
import org.gradle.api.plugins.JavaApplication;
@ -60,8 +65,34 @@ public class Rife2Plugin implements Plugin<Project> {
createRife2DevelopmentOnlyConfiguration(project, configurations, dependencyHandler, precompileTemplates);
exposePrecompiledTemplatesToTestTask(project, configurations, dependencyHandler, precompileTemplates);
configureAgent(project, plugins, rife2Extension, rife2AgentClasspath);
registerUberJarTask(project, plugins, javaPluginExtension, rife2Extension, tasks, precompileTemplates);
TaskProvider<Jar> uberJarTask = registerUberJarTask(project, plugins, javaPluginExtension, rife2Extension, tasks, precompileTemplates);
bundlePrecompiledTemplatesIntoJarFile(tasks, precompileTemplates);
configureMavenPublishing(project, plugins, configurations, uberJarTask);
}
private static void configureMavenPublishing(Project project, PluginContainer plugins, ConfigurationContainer configurations, TaskProvider<Jar> uberJarTask) {
plugins.withId("maven-publish", unused -> {
Configuration rife2UberJarElements = configurations.create("rife2UberJarElements", conf -> {
conf.setDescription("Exposes the uber jar archive of the RIFE2 web application.");
conf.setCanBeResolved(false);
conf.setCanBeConsumed(true);
conf.getOutgoing().artifact(uberJarTask, artifact -> artifact.setClassifier("uber"));
AttributeContainer runtimeAttributes = configurations.getByName(JavaPlugin.RUNTIME_ELEMENTS_CONFIGURATION_NAME).getAttributes();
conf.attributes(attrs -> {
for (Attribute<?> attribute : runtimeAttributes.keySet()) {
Object value = runtimeAttributes.getAttribute(attribute);
//noinspection unchecked
if (Bundling.class.equals(attribute.getType())) {
attrs.attribute(Bundling.BUNDLING_ATTRIBUTE, project.getObjects().named(Bundling.class, Bundling.SHADOWED));
} else {
attrs.attribute((Attribute<Object>) attribute, value);
}
}
});
});
AdhocComponentWithVariants component = (AdhocComponentWithVariants) project.getComponents().getByName("java");
component.addVariantsFromConfiguration(rife2UberJarElements, ConfigurationVariantDetails::mapToOptional);
});
}
private static void exposePrecompiledTemplatesToTestTask(Project project, ConfigurationContainer configurations, DependencyHandler dependencyHandler, TaskProvider<PrecompileTemplates> precompileTemplates) {
@ -87,13 +118,13 @@ public class Rife2Plugin implements Plugin<Project> {
configurations.getByName(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME).extendsFrom(rife2DevelopmentOnly);
}
private static void registerUberJarTask(Project project,
PluginContainer plugins,
JavaPluginExtension javaPluginExtension,
Rife2Extension rife2Extension,
TaskContainer tasks,
TaskProvider<PrecompileTemplates> precompileTemplatesTask) {
tasks.register("uberJar", Jar.class, jar -> {
private static TaskProvider<Jar> registerUberJarTask(Project project,
PluginContainer plugins,
JavaPluginExtension javaPluginExtension,
Rife2Extension rife2Extension,
TaskContainer tasks,
TaskProvider<PrecompileTemplates> precompileTemplatesTask) {
return tasks.register("uberJar", Jar.class, jar -> {
var base = project.getExtensions().getByType(BasePluginExtension.class);
jar.getArchiveBaseName().convention(project.provider(() -> base.getArchivesName().get() + "-uber"));
jar.setDuplicatesStrategy(DuplicatesStrategy.EXCLUDE);