Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
100 changes: 78 additions & 22 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,17 +1,15 @@
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar

import java.nio.file.Files
import java.nio.file.Paths
import com.github.jengelman.gradle.plugins.shadow.transformers.PropertiesFileTransformer

plugins {
id 'java'
id 'eclipse'
id 'maven-publish'
id 'com.gradleup.shadow' version '9.4.1'
id 'net.minecraftforge.gitversion' version '3.1.7'
id 'net.minecraftforge.licenser' version '1.2.0'
id 'net.minecraftforge.gradleutils' version '3.4.4'
id 'net.minecraftforge.changelog' version '3.2.1'
alias libs.plugins.gradleutils
alias libs.plugins.gitversion
alias libs.plugins.changelog
alias libs.plugins.licenser
alias libs.plugins.shadow
}

gradleutils.displayName = 'Installer'
Expand All @@ -34,26 +32,37 @@ java {
withSourcesJar()
}

test {
useJUnitPlatform()
configurations {
multirelease {
extendsFrom implementation
canBeConsumed = true
canBeResolved = false
attributes {
attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage, 'multi-release'))
}
}
}

dependencies {
implementation(libs.jopt.simple)
implementation(libs.gson)
testImplementation(libs.junit.api)
testRuntimeOnly(libs.bundles.junit.runtime)
}

Files.list(Paths.get(projectDir.absolutePath))
.filter(Files::isRegularFile)
.filter(path -> path.getFileName().toString().endsWith('-installer.jar'))
.findFirst()
.ifPresent(path -> {
var firstFile = path.toFile()
logger.lifecycle("Detected test installer: ${firstFile.name}")
dependencies.implementation(files(firstFile))
})
// This isn't great, but it alows us to drop a existing jar file into the root folder and do some debugging
def testJars = fileTree(dir: projectDir).matching{ include '*-installer.jar' }
if (testJars.files.size() == 1) {
logger.lifecycle("Detected test installer: ${testJars.singleFile.name}")
def testData = tasks.register('testData', Jar) {
from(zipTree(testJars.singleFile)) {
exclude('**/*.class')
exclude('META-INF/**')
exclude('joptsimple/**')
}
includeEmptyDirs = false
archiveClassifier = 'test-data'
}
dependencies.implementation(files(testData))
}

tasks.named('jar', Jar) {
manifest {
Expand All @@ -69,17 +78,63 @@ tasks.named('jar', Jar) {
}
}

def multiReleaseJar = tasks.register('multiReleaseJar', Jar) {
manifest {
from(tasks.named('jar').get().manifest)
attributes(['Multi-Release': 'true'])
}
archiveClassifier = 'multi-release'
from(zipTree(tasks.named('jar', Jar).flatMap { it.archiveFile }))
}

def addRelease = version -> {
var cfg = configurations.register('java' + version) {
transitive = false
}
dependencies.add('java' + version, project(':installer-java' + version))

multiReleaseJar.configure {
from(cfg.map{ zipTree(it.singleFile) }) {
into('META-INF/versions/' + version)
exclude('META-INF/**')
includeEmptyDirs = false
}
}
}
addRelease(9)


tasks.named('shadowJar', ShadowJar) {
archiveClassifier = 'fatjar'
minimize()

// Add out multi-release elements
from(multiReleaseJar.map{ zipTree(it.archiveFile) }) {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}

// Meta stuff we don't need
exclude('com/google/errorprone/**')
exclude('META-INF/maven/**')
exclude('META-INF/proguard/**')

// We shouldn't ever need to care about conflicts as this is an executable jar, but just be safe
relocate('joptsimple', 'net.minecraftforge.installer.shadow.joptsimple')
relocate('com.google.gson', 'net.minecraftforge.installer.shadow.gson')

// Rewrite JOpt's message files, so that help text is displayed nicely.
transform(PropertiesFileTransformer) {
paths = [ 'Messages.properties$' ]
keyTransformer = { key -> 'net.minecraftforge.installer.shadow.' + key }
}
}

tasks.withType(JavaCompile).configureEach {
options.encoding = 'UTF-8'
}

artifacts {
archives shadowJar
multirelease multiReleaseJar
}

changelog {
Expand All @@ -92,6 +147,7 @@ publishing {
gradleutils.promote(it)

from components.java
artifact multiReleaseJar

artifactId = 'installer'

Expand Down
29 changes: 29 additions & 0 deletions installer-java9/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
plugins {
id 'java'
id 'eclipse'
alias libs.plugins.gradleutils
alias libs.plugins.gitversion
alias libs.plugins.licenser
}

repositories {
mavenCentral()
maven gradleutils.forgeMaven
}

license {
header = rootProject.file('LICENSE-header.txt')
newLine = false
}

java {
toolchain.languageVersion = JavaLanguageVersion.of(9)
}

dependencies {
implementation(rootProject)
}

tasks.withType(JavaCompile).configureEach {
options.encoding = 'UTF-8'
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
/*
* Copyright (c) Forge Development LLC
* SPDX-License-Identifier: LGPL-2.1-only
*/
package net.minecraftforge.installer;

public class MRTest {
public static int getVersion() {
MRTest.class.getModule();
return 9;
}
}
40 changes: 40 additions & 0 deletions installer-test/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
plugins {
id 'java'
id 'eclipse'
alias libs.plugins.gradleutils
alias libs.plugins.gitversion
alias libs.plugins.licenser
}

repositories {
mavenCentral()
maven gradleutils.forgeMaven
}

license {
header = rootProject.file('LICENSE-header.txt')
newLine = false
}

java {
toolchain.languageVersion = JavaLanguageVersion.of(8)
withSourcesJar()
}

test {
useJUnitPlatform()
}

dependencies {
testImplementation(rootProject) {
attributes {
attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage, 'multi-release'))
}
}
testImplementation(libs.junit.api)
testRuntimeOnly(libs.bundles.junit.runtime)
}

tasks.withType(JavaCompile).configureEach {
options.encoding = 'UTF-8'
}
31 changes: 0 additions & 31 deletions proguard.pro

This file was deleted.

8 changes: 8 additions & 0 deletions settings.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,12 @@ plugins {
dependencyResolutionManagement {
versionCatalogs {
libs {
plugin 'licenser', 'net.minecraftforge.licenser' version '1.2.0'
plugin 'gradleutils', 'net.minecraftforge.gradleutils' version '3.3.21'
plugin 'gitversion', 'net.minecraftforge.gitversion' version '3.1.6'
plugin 'changelog', 'net.minecraftforge.changelog' version '3.1.3'
plugin 'shadow', 'com.gradleup.shadow' version '9.2.2'

library('gson', 'com.google.code.gson:gson:2.13.2')
library('jopt-simple', 'net.sf.jopt-simple:jopt-simple:6.0-alpha-3')

Expand All @@ -28,3 +34,5 @@ dependencyResolutionManagement {
}

rootProject.name = 'Installer'
include(':installer-test')
include(':installer-java9')
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
Expand Down
11 changes: 11 additions & 0 deletions src/main/java/net/minecraftforge/installer/MRTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
/*
* Copyright (c) Forge Development LLC
* SPDX-License-Identifier: LGPL-2.1-only
*/
package net.minecraftforge.installer;

public class MRTest {
public static int getVersion() {
return 8;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ public static void main(String[] args) throws IOException, URISyntaxException {
String javaVersion = System.getProperty("java.version", "missing java version");
String jvmVersion = System.getProperty("java.vm.version", "missing jvm version");
monitor.message(String.format("JVM info: %s - %s - %s", vendor, javaVersion, jvmVersion));
monitor.message("Multi-Release: " + MRTest.getVersion());
monitor.message("java.net.preferIPv4Stack=" + System.getProperty("java.net.preferIPv4Stack"));
monitor.message("Current Time: " + new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new Date()));

Expand Down
32 changes: 0 additions & 32 deletions src/test/java/net/minecraftforge/installer/test/TestTokens.java

This file was deleted.