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 양쪽에서 작동.
54 lines
1.9 KiB
Groovy
54 lines
1.9 KiB
Groovy
plugins {
|
|
id 'java'
|
|
}
|
|
|
|
allprojects {
|
|
apply plugin: 'java'
|
|
|
|
group = project.mod_group
|
|
version = project.mod_version
|
|
|
|
java {
|
|
toolchain.languageVersion = JavaLanguageVersion.of(21)
|
|
}
|
|
|
|
tasks.withType(JavaCompile).configureEach {
|
|
options.release = 21
|
|
options.encoding = 'UTF-8'
|
|
}
|
|
|
|
repositories {
|
|
maven { url = 'https://maven.fabricmc.net/' }
|
|
maven { url = 'https://maven.neoforged.net/releases/' }
|
|
mavenCentral()
|
|
}
|
|
}
|
|
|
|
// ───── merged jar ──────────────────────────────────────────────────────────
|
|
// fabric + neoforge 각각의 remapJar 결과물을 한 jar 안에 압축해서 단일 배포물 생성.
|
|
// 같은 클래스(common 코드)는 한 번만 포함. 각 로더는 자신의 mod metadata
|
|
// (fabric.mod.json / META-INF/neoforge.mods.toml) 만 인식해서 자기 쪽 진입점만 로드.
|
|
|
|
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'
|
|
}
|