Apache Wicket 是基於組件的 Java Web 框架。NetBeans 內置 Wicket 插件版本較舊、更新滯後,易與第三方庫衝突。採用 Maven 構建可精準控制 Wicket 版本、自動解決傳遞依賴、整合最新安全修復。本文提供 NetBeans + Maven 構建 Wicket 6.22.0 項目完整實戰流程。
File → New Project → Maven → Web Application → NextWicketMavenDemo,Group ID:com.example,Artifact ID:wicket-maven-demoJava EE 7 Web → Finish<project ...>
<properties>
<wicket.version>6.22.0</wicket.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- Wicket 核心模塊 -->
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-core</artifactId>
<version>${wicket.version}</version>
</dependency>
<!-- Wicket 認證授權 -->
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-auth-roles</artifactId>
<version>${wicket.version}</version>
</dependency>
<!-- Wicket 擴展組件 (表格、樹、模態窗等) -->
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-extensions</artifactId>
<version>${wicket.version}</version>
</dependency>
<!-- Wicket IoC 整合 (Spring/Guice) -->
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-ioc</artifactId>
<version>${wicket.version}</version>
</dependency>
<!-- 可選:Wicket jQuery UI 整合 -->
<dependency>
<groupId>com.googlecode.wicket-jquery-ui</groupId>
<artifactId>wicket-jquery-ui</artifactId>
<version>6.22.0</version>
</dependency>
<dependency>
<groupId>com.googlecode.wicket-jquery-ui</groupId>
<artifactId>wicket-jquery-ui-core</artifactId>
<version>6.22.0</version>
</dependency>
<dependency>
<groupId>com.googlecode.wicket-jquery-ui</groupId>
<artifactId>wicket-jquery-ui-calendar</artifactId>
<version>6.22.0</version>
</dependency>
<dependency>
<groupId>com.googlecode.wicket-jquery-ui</groupId>
<artifactId>wicket-kendo-ui</artifactId>
<version>6.22.0</version>
</dependency>
<!-- Servlet API (provided 由容器提供) -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- 日志門面 + 實現 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 編譯插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- War 打包插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.3.1</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml> <!-- Servlet 3.0+ 無需 web.xml -->
</configuration>
</plugin>
</plugins>
<!-- 關鍵:配置資源目錄,使 Java 包下的 HTML/屬性文件隨類編譯輸出 -->
<resources>
<resource>
<directory>src/main/java</directory>
<filtering>false</filtering>
<includes>
<include>**</include>
</includes>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
</build>
</project>
Wicket 組件由 Java 類 + 同名 HTML 模板 組成,默認 Maven 僅編譯 src/main/java 下 .java 文件,忽略 .html/.properties。<resources> 配置確保非 Java 文件被複製到 target/classes,打包進 WEB-INF/classes。
package com.example.src;
import org.apache.wicket.protocol.http.WebApplication;
public class Application extends WebApplication {
@Override
public Class extends WebPage> getHomePage() {
return HomePage.class; // 對應 HomePage.java + HomePage.html
}
@Override
public void init() {
super.init();
// 掛載頁面、配置國際化、註解掃描等
// mountPage("/home", HomePage.class);
getMarkupSettings().setDefaultMarkupEncoding("UTF-8");
getRequestCycleSettings().setResponseRequestEncoding("UTF-8");
}
}
package com.example.src;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.model.Model;
public class HomePage extends WebPage {
public HomePage() {
add(new Label("message", Model.of("Hello Wicket 6.22.0 with Maven!")));
}
}
<!DOCTYPE html>
<html xmlns:wicket="https://wicket.apache.org">
<head>
<meta charset="UTF-8"/>
<title>Wicket Maven Demo</title>
</head>
<body>
<h1><span wicket:id="message">Message will appear here</span></h1>
</body>
</html>
位置:src/main/webapp/WEB-INF/web.xml (需手動創建 WEB-INF 目錄)
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://xmlns.jcp.org/xml/ns/javaee
https://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<filter>
<filter-name>WicketApplication</filter-name>
<filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
<init-param>
<param-name>applicationClassName</param-name>
<param-value>com.example.src.Application</param-value>
</init-param>
<init-param>
<param-name>filterMappingUrlPattern</param-name>
<param-value>/*</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>WicketApplication</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
</web-app>
關鍵點:applicationClassName 必須與 Application 類全限定名完全一致(包名+類名)。
Clean and Build (或 Build with Dependencies)Run (部署至 Tomcat)https://localhost:8080/wicket-maven-demo/| 維度 | NetBeans Wicket 插件 | Maven 構建 (本文方案) |
|---|---|---|
| Wicket 版本 | 綁定 IDE 版本,通常較舊 (如 1.5.x/6.x 早期) | 完全可控,可升級至最新 6.22.0/7.x/8.x/9.x |
| 依賴管理 | 手動添加 JAR,易遺漏傳遞依賴、版本衝突 | 自動解析傳遞依賴、統一版本、排除衝突 |
| 第三方整合 | 困難,需手動下載 JAR 放入 lib | 坐標引入即可 (Spring、Shiro、jQuery UI、Kendo UI 等) |
| 構建可重現性 | 依賴 IDE 本地環境,團隊難以一致 | POM 定義一切,CI/CD 原生支持 |
| 安全性 | 舊版本可能含已知漏洞 (CVE) | 可及時升級修復版本,降低安全風險 |
web.xml 中 applicationClassName、HomePage 類名、包結構是否一致pom.xml <resources> 配置、文件與 Java 類同包wicket-core 依賴缺失 → 檢查 Maven 依賴下載、mvn dependency:tree 排查Application.init() 設置 UTF-8、HTML 頭部 <meta charset="UTF-8"/>、Tomcat URIEncoding="UTF-8"Maven 化 Wicket 項目構建,將框架版本控制、依賴解析、資源處理、構建標準化納入工程化軌道。通過 pom.xml 精準鎖定 Wicket 6.22.0 及周邊生態組件,配置 <resources> 解決組件模板編譯輸出,編寫標準 WebApplication + WebPage + HTML 三件套,配置 WicketFilter 完成部署描述,即可構建現代化、可維護、安全可控的 Wicket 應用。建議團隊建立「Wicket Maven 原型」,新項目一鍵生成標準骨架,聚焦業務創新而非配置鬥爭。