初次Gradle编译工程的记录 for PlotSquared
Lastmod: 2023-06-17

阿伟要我编译个项目。

Q0: 为什么是我?

Q1: 我打算在macOS编译一个gradle管理的Java项目,请教我具体步骤。

Gradle

安装Gradle 在Mac上安装Gradle有多种方法。您可以使用Homebrew进行安装,也可以直接从Gradle官方网站下载二进制发行版。以下是使用Homebrew的安装方法:

  1. 打开终端应用程序。

  2. 运行以下命令安装Homebrew(如果您已经安装了Homebrew,请跳过此步骤):

    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
    
  3. 运行以下命令安装Gradle:

    brew install gradle
    

Q2: 我看到build.gradle.kts里面有一栏配置, tasks.compileJava.configure { options.release.set(17) } 这代表指定了java17编译吗?

Answer: 是的。

JDK17

下载Orcale JDK 17,解压到下载目录。

export JAVA_HOME=/Users/jyufu/Downloads/jdk-17.0.7.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH

java -version
#显示如下,即可。
#java version "17.0.7" 2023-04-18 LTS

Build

Error0

不用说,第一个报错肯定是下载依赖库有问题。没有科学上网。请科学上网后继续。

Error1

**********
You need to fork and clone this repository! Don't download a .zip file.
If you need assistance, consult the GitHub docs: https://docs.github.com/get-started/quickstart/fork-a-repo
**********

意思是,你不要下载release的,要自己克隆。这里我指定v6.11.1的发布版。

git clone --branch v6.11.1 --depth 1 https://github.com/IntellectualSites/PlotSquared.git

Error2

* What went wrong:
A problem was found with the configuration of task ':PlotSquared-Bukkit:shadowJar' (type 'ShadowJar').
  - Gradle detected a problem with the following location: '/Users/jyufu/Downloads/PlotSquared/Core/build/libs/PlotSquared-Core-6.11.1.jar'.
    
    Reason: Task ':PlotSquared-Bukkit:shadowJar' uses this output of task ':PlotSquared-Core:shadowJar' without declaring an explicit or implicit dependency. This can lead to incorrect results being produced, depending on what order the tasks are executed.
    
    Possible solutions:
      1. Declare task ':PlotSquared-Core:shadowJar' as an input of ':PlotSquared-Bukkit:shadowJar'.
      2. Declare an explicit dependency on ':PlotSquared-Core:shadowJar' from ':PlotSquared-Bukkit:shadowJar' using Task#dependsOn.
      3. Declare an explicit dependency on ':PlotSquared-Core:shadowJar' from ':PlotSquared-Bukkit:shadowJar' using Task#mustRunAfter.
    
    Please refer to https://docs.gradle.org/8.1.1/userguide/validation_problems.html#implicit_dependency for more details about this problem.

喂给GPT,告诉我某个任务Task没声明依赖。

我翻了一下跟目录的build.gradle.kts,明明声明了build动作前会做什么什么。

太不可靠了。

观察目录结构,发现Core和Bukkit两个子工程。

既然Bukkit要依赖Core,先编译Core看看

cd PlotSquared/Core
gradle build
#BUILD SUCCESSFUL in 687ms

多么令人愉快的绿色字体。

接着编译Bukkit。

cd ../Bukkit
gradle build
#BUILD SUCCESSFUL in 387ms

多么意外又愉快的绿色字体。

其实到这里,在build/lib目录已经能生成想要的PlotSquared-Bukkit-6.11.1.jar

那为什么根目录build就不行呢。

我最后试着GPT提示,在Bukkit的build.gradle.kts,找到任务tasks.named<ShadowJar>("shadowJar")

添加了以下依赖声明

dependsOn(":PlotSquared-Core:shadowJar")

喔嚯,接着,也能编译通过了。

奇怪。