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:
commit
834c75492b
2 changed files with 61 additions and 8 deletions
|
@ -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"])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue