Gradle 專案

      在〈Gradle 專案〉中尚無留言

本篇說明如何在 Linux 下使用 Gradle 新增 Servlet 專案,然後使用 VSCode 與之連線。雖然也可使用 Maven 建立專案,但 Gradle 更為靈活方便,且是目前最新的技術,所以建議以此為主。

VSCode Extension

VSCode 需安裝如下 Extension

Extension Pack for Java
Gradle for Java
Language Support for Java (RedHat)

安裝 Gradle

Linux 下需先安裝套件

sudo snap install gradle --classic

建立專案

使用如下指令建立 JavaWeb 專案目錄,然後進行 gradle 初始化。

cd /server
mkdir JavaWeb
cd JavaWeb
gradle init

type : Basic。如果使用 Application 則會把程式碼放在專案下的 app 目錄,反而比較麻煩。

專案名稱 : Enter

DSL :  Groovy

Generae build using new APIs and behavior : no

build.gradle

專案下的 build.gradle 設定如下

apply plugin: 'java'
apply plugin: 'jacoco'
apply plugin: 'war'

repositories {
    mavenCentral()
}

dependencies {
    compileOnly 'jakarta.platform:jakarta.jakartaee-web-api:11.0.0'
    testImplementation 'junit:junit:4.13'
    implementation 'com.mysql:mysql-connector-j:8.4.0'
    compileOnly 'jakarta.servlet:jakarta.servlet-api:6.0.0'
    implementation 'jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api:3.0.2'
    implementation 'org.glassfish.web:jakarta.servlet.jsp.jstl:3.0.1'
    implementation 'net.coobird:thumbnailator:0.4.21'
}
task explodedWar(type: Copy) {
    dependsOn war
    from(zipTree(war.archiveFile))
    //into("$buildDir/exploded")
    into("exploded")
}
build.finalizedBy(explodedWar)

上述的 task expoldedWar 是解壓縮 .war 的指令,目的地為專案下的 exploded 目錄。

專案路徑

請於專案下依序新增 src/main/java 及 src/main/webapp 二個目錄。

模板

將模板置於 src/main/webapp 之下。

自訂 sdk

我們自行撰寫的 sdk 需置於 src/main/java 之下。

發佈

請於專案下執行如下指令,發佈後的結果位於專案下的 exploded 目錄。

gradle clean build

Tomcat 網頁根目錄

開啟 /opt/tomcat/conf/server.xml,將 docBase 設成如下

<Context path="/" docBase="/server/JavaWeb/exploded" debug="0" reloadable="true"/>

然後重啟 Tomcat

sudo systemctl restart tomcat

新增首頁 Servlet

於 java 目錄下新增 home 目錄,然後新增 views.java,內容如下

package home;

import java.io.IOException;
import java.io.PrintWriter;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

@WebServlet(name = "index", urlPatterns = {"/index"})
public class views extends HttpServlet {
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        request.getRequestDispatcher("/template/home/index.jsp").forward(request, response);
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    @Override
    public String getServletInfo() {
        return "Short description";
    }
}

VSCode jakarta 錯誤

如果在 VS Code 出現 Jakarta 錯誤,請按下 Shift+Ctrl+p,然後選擇如下指令,reload gradle

Java: Clean Java Language Server Workspace

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *