阿伟要我编译个项目。
Q0: 为什么是我?
Q1: 我打算在macOS编译一个gradle管理的Java项目,请教我具体步骤。
Gradle
安装Gradle 在Mac上安装Gradle有多种方法。您可以使用Homebrew进行安装,也可以直接从Gradle官方网站下载二进制发行版。以下是使用Homebrew的安装方法:
-
打开终端应用程序。
-
运行以下命令安装Homebrew(如果您已经安装了Homebrew,请跳过此步骤):
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
-
运行以下命令安装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")
喔嚯,接着,也能编译通过了。
奇怪。