mirror of
https://github.com/ethauvin/rife2-hello.git
synced 2025-04-25 23:37: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 {
|
plugins {
|
||||||
application
|
application
|
||||||
id("com.uwyn.rife2")
|
id("com.uwyn.rife2")
|
||||||
|
`maven-publish`
|
||||||
}
|
}
|
||||||
|
|
||||||
base {
|
base {
|
||||||
archivesName.set("hello")
|
archivesName.set("hello")
|
||||||
version = 1.0
|
version = 1.0
|
||||||
|
group = "com.example"
|
||||||
}
|
}
|
||||||
|
|
||||||
application {
|
application {
|
||||||
mainClass.set("hello.App")
|
mainClass.set("hello.App")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
java {
|
||||||
|
toolchain {
|
||||||
|
languageVersion.set(JavaLanguageVersion.of(17))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
// Use Maven Central for resolving dependencies.
|
// Use Maven Central for resolving dependencies.
|
||||||
mavenCentral()
|
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.Configuration;
|
||||||
import org.gradle.api.artifacts.ConfigurationContainer;
|
import org.gradle.api.artifacts.ConfigurationContainer;
|
||||||
import org.gradle.api.artifacts.dsl.DependencyHandler;
|
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.file.DuplicatesStrategy;
|
||||||
import org.gradle.api.plugins.BasePluginExtension;
|
import org.gradle.api.plugins.BasePluginExtension;
|
||||||
import org.gradle.api.plugins.JavaApplication;
|
import org.gradle.api.plugins.JavaApplication;
|
||||||
|
@ -60,8 +65,34 @@ public class Rife2Plugin implements Plugin<Project> {
|
||||||
createRife2DevelopmentOnlyConfiguration(project, configurations, dependencyHandler, precompileTemplates);
|
createRife2DevelopmentOnlyConfiguration(project, configurations, dependencyHandler, precompileTemplates);
|
||||||
exposePrecompiledTemplatesToTestTask(project, configurations, dependencyHandler, precompileTemplates);
|
exposePrecompiledTemplatesToTestTask(project, configurations, dependencyHandler, precompileTemplates);
|
||||||
configureAgent(project, plugins, rife2Extension, rife2AgentClasspath);
|
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);
|
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) {
|
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);
|
configurations.getByName(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME).extendsFrom(rife2DevelopmentOnly);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void registerUberJarTask(Project project,
|
private static TaskProvider<Jar> registerUberJarTask(Project project,
|
||||||
PluginContainer plugins,
|
PluginContainer plugins,
|
||||||
JavaPluginExtension javaPluginExtension,
|
JavaPluginExtension javaPluginExtension,
|
||||||
Rife2Extension rife2Extension,
|
Rife2Extension rife2Extension,
|
||||||
TaskContainer tasks,
|
TaskContainer tasks,
|
||||||
TaskProvider<PrecompileTemplates> precompileTemplatesTask) {
|
TaskProvider<PrecompileTemplates> precompileTemplatesTask) {
|
||||||
tasks.register("uberJar", Jar.class, jar -> {
|
return tasks.register("uberJar", Jar.class, jar -> {
|
||||||
var base = project.getExtensions().getByType(BasePluginExtension.class);
|
var base = project.getExtensions().getByType(BasePluginExtension.class);
|
||||||
jar.getArchiveBaseName().convention(project.provider(() -> base.getArchivesName().get() + "-uber"));
|
jar.getArchiveBaseName().convention(project.provider(() -> base.getArchivesName().get() + "-uber"));
|
||||||
jar.setDuplicatesStrategy(DuplicatesStrategy.EXCLUDE);
|
jar.setDuplicatesStrategy(DuplicatesStrategy.EXCLUDE);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue