개인 자료란 (JE)

  서버 커뮤니티

Profile HeartPattern 대표칭호 없음
Profile

커뮤니티 소통 개발하기 기타자료

Exhibitionism: 클래스,메서드,필드를 노출시키는 프로그램

2020.01.31 조회 수 230 추천 수 2

Exhibitionism

Exhibitionism은 클래스 파일 변환 도구입니다. Exhibitionism은 모든 클래스, 필드, 메서드를 public, non-final로 만듭니다.

이 도구를 사용하여 nms, 또는 craftbukkit 클래스에 리플렉션 없이 접근할 수 있습니다.


컴파일

프로젝트를 컴파일하기 위해서, 깃허브 레포지토리를 로컬 머신에 클론합니다. gradlew 파일이 있는 디렉토리에서 터미널을 열고, 아래 명령어를 입력하여 프로젝트를 컴파일합니다.


./gradlew installDist (리눅스, MacOS)

gradlew.bat installDist  (윈도우)


실행 스크립트와 런타임 라이브러리들이 build/install/Exhibitionism 폴더 아래에 설치됩니다.


사용법

build/install/Exhibitionism/bin 폴더에서 터미널을 열고 Exhibitionism (리눅스, MacOS) 또는 Exhibitionism.bat (윈도우)를 다음 명령행 인수와 함께 실행합니다.


--input

입력 파일의 이름 (.jar 파일)


--output

출력 파일의 이름. 이미 해당 파일이 존재하면, 덮어씁니다.


--parallel (선택, 기본값=1)

클래스 변환에 사용할 스레드 갯수


--nopublic (플래그)

이 플래그가 설정되면, public 화 작업을 진행하지 않습니다.


--noopen (플래그)

이 플래그가 설정되면, non-final 화 작업을 진행하지 않습니다.


--path (선택)

Exhibitionism 작업을 진행할 경로를 설정합니다. 쉼표(',')를 이용하여 여러개의 경로를 지정할 수 있습니다. 이 인수가 지정되지 않을경우, 모든 클래스파일에 대해 적용합니다.


--noStaticFinal (플래그)

이 플래그가 설정되면 static final 필드에 대해서 non-final 화 작업을 진행하지 않습니다.


예시 사용법

./Exhibitionism --input Bukkit.jar --output Bukkit-open.jar --parallel 8 --path net.minecraft.server,org.bukkit.craftbukkit --noStaticFinal


API 지원

Exhibitionism은 HeartPattern maven repository에 호스팅되어있습니다. 아래 코드를 사용하여 의존성을 추가합니다.

1
2
3
4
5
6
7
8
9
10
repositories{
    maven{
        url 'https://maven.heartpattern.kr/repository/maven-public/'
    }
}
 
dependencies{
    compile 'kr.heartpattern:Exhibitionism:1.0.0-SNAPSHOT'
}
 
cs


API는 간단합니다. 오직 한개의 메서드와 한개의 클래스만 사용하면 됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
transform(
            ExhibitionismOptions(
                source = "bukkit.jar",
                destination = "bukkit-open.jar",
                parallel = 8,
                path = setOf("net.minecraft", "org.bukkit.craftbukkit"),
                logger = Logger.getGlobal(),
                public = true,
                open = true,
                noStaticFinal = true
            )
        )
cs

exhibitionism-maven-plugin

Exhibitionism의 maven plugin입니다. 

사용법

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<repositories>
    <repository>
        <id>HeartPattern</id>
        <url>https://maven.heartpattern.kr/repository/maven-public/</url>
    </repository>
</repositories>
 
<build>
    <plugins>
        <plugin>
            <groupId>kr.heartpattern</groupId>
            <artifactId>exhibitionism-maven-plugin</artifactId>
            <version>1.0.0-SNAPSHOT</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>exhibit</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
cs

설정

output

출력 파일을 지정합니다. 설정하지 않으면, 기존 파일을 바꿉니다.


parallel(기본값=1)

클래스를 변환할때 사용할 스레드의 갯수를 지정합니다. 설정하지 않으면, 단일 스레드를 사용합니다.


open(기본값=true)

non-final 화 작업을 진행할지 설정합니다.


publify(기본값=true)

public 화 작업을 진행할지 설정합니다.


debug(기본값=false)

디버깅 메세지를 출력할지 설정합니다.


noStaticFinal(기본값=false)

static final 필드에 대해 non-final 작업을 건너뛸지 설정합니다.


paths

Exhibitionism 작업을 진행할 경로를 지정합니다. 예를 들어 net/minecraft로 설정하면, net.minecraft 패키지에 대해서만 Exhibitionism 작업이 진행됩니다. 지정하지 않으면, 모든 파일에 대해 진행됩니다.

예시 설정

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<plugin>
    <groupId>kr.heartpattern</groupId>
    <artifactId>exhibitionism-maven-plugin</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>exhibit</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <output>open-all.jar</output>
        <open>true</open>
        <publify>true</publify>
        <parallel>8</parallel>
        <noStaticFinal>true</noStaticFinal>
        <debug>false</debug>
        <paths>
            <path>net/minecraft</path>
            <path>org/bukkit/craftbukkit</path>
        </paths>
    </configuration>
</plugin>
cs

링크

GitHub: https://github.com/HeartPattern/Exhibitionism

GitHub: https://github.com/HeartPattern/exhibitionism-maven-plugin

2개의 댓글

DDang_
2020.01.31

좋은 글 감사합니다

YeeV
2020.03.31

잘 사용 할게요!

뉴스 및 창작물
/files/thumbnails/520/751/003/262x150.crop.jpg?20240328020349

레드스톤

마인크래프트 노트블록으로 만든 『 Bling‐Bang‐Bang‐Born 』 1

Sonttukk

2024-03-23

1

/files/thumbnails/467/742/003/262x150.crop.jpg?20240311163123

레드스톤

[노트블럭커버] MILGRAM -ミルグラム(밀그램)- / 아마네 「숙청 행진」 제 2심 2

리비온

2024-03-11

0

/files/thumbnails/846/741/003/262x150.crop.jpg?20240310221214

레드스톤

워든 vs 라마 200마리 1

GlassesFilm

2024-03-10

0

/files/thumbnails/542/739/003/262x150.crop.jpg?20240309070457

레드스톤

[고인의 명복을 빕니다][노트블럭]드래곤볼 GT 오프닝 - 점점 마음이 끌려

리비온

2024-03-09

0

/files/thumbnails/326/738/003/262x150.crop.jpg?20240328020414

레드스톤

마인크래프트 노트블록으로 만든 『 Build Our Machine 』

Sonttukk

2024-03-07

0