SN1
대표칭호 없음
게임버전 (JE) | 관련없음 |
---|---|
게임버전 (BE) | 관련없음 |
이전에 작성했던 글에서 이어지는 내용입니다. 큰 관련성은 없지만요.
여러 조언을 받아 최종적으로 Gradle Subproject를 이용한 NMS 지원을 시도하기로 했습니다.
그런데 Gradle의 Build 결과가 제가 원하는 것과는 상당히 다른 모양새로 나옵니다.
현재 디렉토리의 구조입니다.
my-lib │ .editorconfig │ .gitignore │ build.gradle.kts │ gradlew │ gradlew.bat │ settings.gradle.kts │ ├─bukkit_1_19_R1 │ │ build.gradle.kts │ │ │ └─src │ └─main │ └─java │ └─xyz │ └─mylib │ └─redacted │ └─internal │ IMPlayer_v1_19_R1.java │ ├─core │ │ build.gradle.kts │ │ │ └─src │ └─main │ └─java │ └─xyz │ └─mylib │ └─redacted │ │ MPlayer.java │ │ │ └─internal │ IMPlayer.java │ └─gradle └─wrapper gradle-wrapper.jar gradle-wrapper.properties
core
모듈은 실제 bukkit_*
모듈이 구현해야 하는 클래스의 interface를 제공하며, 그 이외에 NMS가 필요하지 않은 Paper API에 대한 편의성 메소드 및 클래스를 제공하는 것이 목적입니다.
각 bukkit_*
모듈은 실제로 NMS가 필요한 부분에 대해서 Bukkit API 버전별로 실제 구현을 맡고 있고요.
문제는 여기서 root 프로젝트에 대해 build나 jar 작업을 실행하면 core
모듈과 bukkit_*
모듈 각각의 build 디렉토리에 jar 결과물이 나온다는 것입니다.
제가 원하는 결과물은 my-lib/build 디렉토리에 core
모듈과 bukkit_*
모듈의 모든 클래스가 합쳐진 형태의 jar이 만들어지는 것입니다.
이걸 어떻게 해야 할 수 있을까요?
현재 각 빌드 스크립트는 아래와 같습니다.
// build.gradle.kt allprojects { apply { plugin("java") } repositories { mavenCentral() maven("https://repo.papermc.io/repository/maven-public/") } group = "xyz.mylib" version = "1.0.0-SNAPSHOT" }
// bukkit_1_19_R1/build.gradle.kt plugins { id("io.papermc.paperweight.userdev") version "1.3.8" } dependencies { compileOnly(project(":core")) paperDevBundle("1.19.2-R0.1-SNAPSHOT") }
// core/build.gradle.kt dependencies { compileOnly("io.papermc.paper:paper-api:1.19.2-R0.1-SNAPSHOT") } tasks.jar { // TODO: When run jar task in root project, include all subproject to its output }
작은거인
2022.09.30구글링..은 해보셨죠...?
저도 이걸로 검색해본적 있는데 바로 나오던디..
SN1
2022.09.30키워드를 뭐로 하셨나요? gradle subproject combined나 gradle subproject merged, gradle subproject single output 등 여러 키워드로 검색해보아도 나오지 않던데요.
작은거인
2022.09.30아 합쳐야 되군요.
저는 그냥 build 폴더에 jar을 모아놓기만 해서..
찾아보겠습니닷 :)
작은거인
2022.09.30...근데 그냥 쉐도우 하면 되지 않나요...?
https://imperceptiblethoughts.com/shadow/
SN1
2022.09.30쉐도우가 있었네요... 왜 이걸 생각 못했을까요.
그런데 쉐도우를 쓰게 되더라도 이게 root 디렉토리 아래의 build 디렉토리에 결과물을 넣을 것 같지는 않아 보입니다. 이건 조금 더 찾아봐야겠네요.
결과물을 root 바로 밑의 build 폴더에 넣는 것도 목표 중 하나인터라...
쉐도우 상기시켜주셔서 정말 감사드립니다!
작은거인
2022.09.30그건 jar 디렉토리 바꾸면 돼요
그리고 한 서브프로젝트에서 다 implementation으로 추가해서 쉐도우 하시고 jar 디렉토리를 루트의 한 폴더로 설정하시면 될 것 같네여