Restructure into multi-loader (Fabric + NeoForge) with merged jar
common 디렉토리에 로더 비종속 ChatAnswerCore 를 두고, fabric/ 과 neoforge/ 서브프로젝트가 각자 진입점만 갖도록 분리. 두 결과물을 하나의 jar 로 묶기 위해 Fabric 측 common 클래스를 Shadow 의 relocate 로 kr.tkrmagid.chatanswer.fabric.core 패키지로 옮긴다 (Fabric 은 intermediary, NeoForge 는 Mojang 매핑이라 같은 클래스 경로에 그대로 두면 충돌). 루트의 mergedJar 태스크가 :fabric:relocatedJar 와 :neoforge:jar 를 합쳐서 build/libs/chat_answer-<version>-all.jar 생성. 산출물: 9.9KB 통합 jar 가 Fabric / NeoForge 양쪽에서 작동.
This commit is contained in:
70
build.gradle
70
build.gradle
@@ -1,45 +1,53 @@
|
||||
plugins {
|
||||
id 'fabric-loom' version '1.10-SNAPSHOT'
|
||||
id 'java'
|
||||
}
|
||||
|
||||
group = project.mod_group
|
||||
version = project.mod_version
|
||||
archivesBaseName = project.mod_id
|
||||
allprojects {
|
||||
apply plugin: 'java'
|
||||
|
||||
java {
|
||||
toolchain.languageVersion = JavaLanguageVersion.of(21)
|
||||
withSourcesJar()
|
||||
}
|
||||
group = project.mod_group
|
||||
version = project.mod_version
|
||||
|
||||
repositories {
|
||||
maven { url = 'https://maven.fabricmc.net/' }
|
||||
mavenCentral()
|
||||
}
|
||||
java {
|
||||
toolchain.languageVersion = JavaLanguageVersion.of(21)
|
||||
}
|
||||
|
||||
dependencies {
|
||||
minecraft "com.mojang:minecraft:${project.minecraft_version}"
|
||||
mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2"
|
||||
modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"
|
||||
modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"
|
||||
}
|
||||
tasks.withType(JavaCompile).configureEach {
|
||||
options.release = 21
|
||||
options.encoding = 'UTF-8'
|
||||
}
|
||||
|
||||
processResources {
|
||||
inputs.property "version", project.version
|
||||
inputs.property "mod_id", project.mod_id
|
||||
|
||||
filesMatching("fabric.mod.json") {
|
||||
expand "version": project.version, "mod_id": project.mod_id
|
||||
repositories {
|
||||
maven { url = 'https://maven.fabricmc.net/' }
|
||||
maven { url = 'https://maven.neoforged.net/releases/' }
|
||||
mavenCentral()
|
||||
}
|
||||
}
|
||||
|
||||
tasks.withType(JavaCompile).configureEach {
|
||||
options.release = 21
|
||||
options.encoding = 'UTF-8'
|
||||
}
|
||||
// ───── merged jar ──────────────────────────────────────────────────────────
|
||||
// fabric + neoforge 각각의 remapJar 결과물을 한 jar 안에 압축해서 단일 배포물 생성.
|
||||
// 같은 클래스(common 코드)는 한 번만 포함. 각 로더는 자신의 mod metadata
|
||||
// (fabric.mod.json / META-INF/neoforge.mods.toml) 만 인식해서 자기 쪽 진입점만 로드.
|
||||
|
||||
jar {
|
||||
from("LICENSE") {
|
||||
rename { "${it}_${project.archivesBaseName}" }
|
||||
tasks.register('mergedJar', Jar) {
|
||||
dependsOn ':fabric:relocatedJar', ':neoforge:jar'
|
||||
archiveBaseName = project.mod_id
|
||||
archiveVersion = project.mod_version
|
||||
archiveClassifier = 'all'
|
||||
destinationDirectory = file('build/libs')
|
||||
|
||||
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
||||
|
||||
// Fabric: Shadow(relocatedJar) 가 common 패키지를 kr.tkrmagid.chatanswer.fabric.core 로 옮긴 jar
|
||||
// NeoForge: common 은 그대로 kr.tkrmagid.chatanswer.core 에 위치
|
||||
// → 같은 클래스명 다른 매핑이라도 패키지 경로가 달라서 공존 가능
|
||||
from(zipTree(project(':fabric').tasks.named('relocatedJar').flatMap { it.archiveFile }))
|
||||
from(zipTree(project(':neoforge').tasks.named('jar').flatMap { it.archiveFile })) {
|
||||
// META-INF/MANIFEST.MF 는 Fabric 측 것을 그대로 사용 (둘 다 단순 manifest)
|
||||
exclude 'META-INF/MANIFEST.MF'
|
||||
}
|
||||
}
|
||||
|
||||
tasks.register('buildAll') {
|
||||
dependsOn 'mergedJar'
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user