diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 1b16436..147541c 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,6 +1 @@ -FROM mcr.microsoft.com/devcontainers/java:17 - -USER root -RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ - && apt-get -y install --no-install-recommends maven -USER vscode \ No newline at end of file +FROM mcr.microsoft.com/devcontainers/java:21 diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index c8f872d..98b9f44 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,8 +1,8 @@ { "name": "Minecraft Plugin Development", - "build": { - "dockerfile": "Dockerfile" - }, + "dockerComposeFile": "../docker-compose.yml", + "service": "dev", + "workspaceFolder": "/workspace", "customizations": { "vscode": { "extensions": [ @@ -11,6 +11,5 @@ ] } }, - "forwardPorts": [25565], "postCreateCommand": "mvn dependency:go-offline" -} \ No newline at end of file +} diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 302e245..11f7a3e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -10,10 +10,10 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Set up JDK 17 + - name: Set up JDK 21 uses: actions/setup-java@v4 with: - java-version: "17" + java-version: "21" distribution: "temurin" - name: Set up Maven @@ -30,4 +30,4 @@ jobs: ${{ runner.os }}-maven- - name: Build & Format Check with Maven - run: mvn -B verify \ No newline at end of file + run: mvn -B verify diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 331a91b..7d167ff 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -14,10 +14,10 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Set up JDK 17 + - name: Set up JDK 21 uses: actions/setup-java@v4 with: - java-version: "17" + java-version: "21" distribution: "temurin" - name: Cache Maven packages @@ -35,4 +35,4 @@ jobs: uses: softprops/action-gh-release@v1 with: generate_release_notes: true - files: target/*.jar \ No newline at end of file + files: target/*.jar diff --git a/.gitignore b/.gitignore index 87f3c62..b8c3a52 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,2 @@ -build/ +# Maven target/ -.DS_Store diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 7b016a8..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "java.compile.nullAnalysis.mode": "automatic" -} \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..d85c78f --- /dev/null +++ b/Makefile @@ -0,0 +1,57 @@ +# Minecraft LogTime Plugin - 開発用Makefile + +.PHONY: help build start stop clean logs test reload + +# デフォルトターゲット +help: + @echo "利用可能なコマンド:" + @echo " make build - プラグインをビルド" + @echo " make start - Paper サーバーを起動" + @echo " make stop - すべてのコンテナを停止" + @echo " make clean - ビルド成果物とコンテナを削除" + @echo " make logs - Paper サーバーのログを表示" + @echo " make test - テストを実行" + @echo " make reload - プラグインをリビルドしてサーバー再起動" + +# プラグインをビルド +build: + @echo "プラグインをビルド中..." + mvn clean package + +# Paper サーバーを起動 +start: + @echo "Paper サーバーを起動中..." + docker-compose up -d paper + +# すべてのコンテナを停止 +stop: + @echo "コンテナを停止中..." + docker-compose down + +# ビルド成果物とコンテナを削除 +clean: + @echo "クリーンアップ中..." + docker-compose down -v + docker-compose build --no-cache + rm -rf target/ + +# Paper サーバーのログを表示 +logs: + docker-compose logs -f paper + +# テストを実行 +test: + mvn test + +# プラグインをリビルドしてサーバー再起動(開発時に便利) +reload: + @echo "プラグインをリビルドしてサーバー再起動中..." + make build + docker-compose restart paper + +# 開発環境を初期化(初回セットアップ用) +init: + @echo "開発環境を初期化中..." + docker-compose build + make build + @echo "初期化完了!'make start' でサーバーを起動できます。" diff --git a/docker-compose.yml b/docker-compose.yml index 33af68b..c4f53df 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,44 +1,26 @@ services: - # 開発用コンテナ - # プラグインのビルド(コンパイル)はこのコンテナ内で行います。 - development: + dev: build: context: . - dockerfile: ./docker/development/Dockerfile - container_name: mc-plugin-dev - working_dir: /app + dockerfile: ./.devcontainer/Dockerfile volumes: - # ローカルのプロジェクトフォルダをコンテナの/appに同期します。 - # これにより、ローカルでコードを編集すると即座にコンテナ内に反映されます。 - - .:/app - # Gradleのキャッシュを永続化し、2回目以降のビルドを高速化します。 - - gradle_cache:/root/.gradle - # コンテナを起動し続け、`docker-compose exec`で中に入れるようにします。 - tty: true - stdin_open: true + - .:/workspace:cached + - m2_cache:/home/vscode/.m2 + command: sleep infinity - # Paperサーバーコンテナ - # 開発したプラグインをテストするためのマイクラサーバーです。 paper: build: context: . - dockerfile: ./docker/paper/Dockerfile + dockerfile: ./paper/Dockerfile container_name: mc-plugin-paper ports: - - "25565:25565" # Minecraftサーバーのポート + - "25565:25565" volumes: - # developmentコンテナでビルドしたjarファイルを、サーバーのpluginsフォルダに配置します。 - - ./build/libs:/server/plugins - # ワールドデータなどを永続化します。 + - ./target:/server/plugins - paper_data:/server - # サーバーの起動にはEULAへの同意が必要です。 - environment: - EULA: "TRUE" - # developmentコンテナが起動してからpaperが起動するように設定 depends_on: - - development + - dev -# Dockerが管理するデータ領域(ボリューム)の定義 volumes: - gradle_cache: paper_data: + m2_cache: diff --git a/docker/development/Dockerfile b/docker/development/Dockerfile deleted file mode 100644 index dfb965e..0000000 --- a/docker/development/Dockerfile +++ /dev/null @@ -1,5 +0,0 @@ -# JAVAのプログラムを作る為の全部入りセットをインストール -FROM eclipse-temurin:21-jdk-jammy - -# 作業ディレクトリを作成 -WORKDIR /app \ No newline at end of file diff --git a/docker/paper/Dockerfile b/docker/paper/Dockerfile deleted file mode 100644 index d2a5bd3..0000000 --- a/docker/paper/Dockerfile +++ /dev/null @@ -1,22 +0,0 @@ -# ----------------------------------------------------------------- -# docker/paper/Dockerfile -# ----------------------------------------------------------------- -# プラグインをテストするためのPaperサーバー環境を定義します。(1.21.0対応版) -# ----------------------------------------------------------------- - -# Minecraft 1.21 は Java 21 が必須のため、ベースイメージを更新 -FROM eclipse-temurin:21-jre-jammy - -# 必要なツールをインストール -RUN apt-get update && apt-get install -y wget && rm -rf /var/lib/apt/lists/* - -# サーバーの作業ディレクトリを作成 -WORKDIR /server - -# Paperサーバーの最新ビルドを自動で取得するように修正 -ARG MC_VERSION=1.21 -RUN wget -O paper.jar https://api.papermc.io/v2/projects/paper/versions/${MC_VERSION}/builds/$(wget -qO- https://api.papermc.io/v2/projects/paper/versions/${MC_VERSION} | grep -o '"builds":\[[^]]*' | grep -o '[0-9]*' | tail -1)/downloads/paper-${MC_VERSION}-$(wget -qO- https://api.papermc.io/v2/projects/paper/versions/${MC_VERSION} | grep -o '"builds":\[[^]]*' | grep -o '[0-9]*' | tail -1).jar - -# サーバーを起動するコマンド -# メモリ割り当てはPCのスペックに合わせて調整してください (例: -Xms2G -Xmx2G) -CMD ["java", "-Xms1G", "-Xmx1G", "-jar", "paper.jar", "--nogui"] diff --git a/paper/Dockerfile b/paper/Dockerfile new file mode 100644 index 0000000..d9894eb --- /dev/null +++ b/paper/Dockerfile @@ -0,0 +1,20 @@ +# === ビルド用ステージ === +FROM debian:stable-slim AS builder + +ARG MC_VERSION="1.21" +ARG BUILD_NUMBER="130" + +RUN apt-get update && apt-get install -y wget && rm -rf /var/lib/apt/lists/* +RUN wget -O paper.jar "https://api.papermc.io/v2/projects/paper/versions/${MC_VERSION}/builds/${BUILD_NUMBER}/downloads/paper-${MC_VERSION}-${BUILD_NUMBER}.jar" + +# === 起動用ステージ === +FROM eclipse-temurin:21-jre-jammy + +WORKDIR /server + +COPY --from=builder /paper.jar . +COPY paper/eula.txt . + +EXPOSE 25565 + +CMD ["java", "-Xms1G", "-Xmx1G", "-jar", "paper.jar", "--nogui"] diff --git a/paper/eula.txt b/paper/eula.txt new file mode 100644 index 0000000..02dccd9 --- /dev/null +++ b/paper/eula.txt @@ -0,0 +1 @@ +eula=true diff --git a/pom.xml b/pom.xml index 1340aec..ef04699 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ jar - 17 + 21 UTF-8 1.9.22 @@ -81,4 +81,4 @@ - \ No newline at end of file +