專案依賴私有/未發布至 Maven 倉庫的 JAR 檔,需手動引入並確保打包 WAR 時包含這些依賴。
local-libs),確認加入模組。
local-libs。Compile(預設),確保編譯與執行時可用。
IDEA 的 Library 設定僅影響 IDE 編譯與執行,Maven 打包需額外配置 maven-war-plugin。
lib/ 目錄,打包時複製至 WEB-INF/lib<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.3.2</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
<warName>${project.artifactId}</warName>
<webResources>
<resource>
<directory>${project.basedir}/lib</directory>
<targetPath>WEB-INF/lib</targetPath>
<includes>
<include>**/*.jar</include>
</includes>
</resource>
</webResources>
</configuration>
</plugin>
</plugins>
</build>
project-root/
├── pom.xml
├── src/
│ ├── main/
│ │ ├── java/
│ │ ├── resources/
│ │ └── webapp/
│ │ └── WEB-INF/
│ │ └── web.xml
│ └── test/
└── lib/ # 本地 JAR 放置處
├── proprietary-api.jar
└── legacy-utils.jar
手動安裝單一 JAR:
mvn install:install-file \ -Dfile=path/to/your.jar \ -DgroupId=com.example \ -DartifactId=proprietary-api \ -Dversion=1.0.0 \ -Dpackaging=jar
安裝後在 pom.xml 正常引用:
<dependency>
<groupId>com.example</groupId>
<artifactId>proprietary-api</artifactId>
<version>1.0.0</version>
</dependency>
優點:符合 Maven 規範、支援傳遞性依賴、CI/CD 友善、多人協作無需共享 lib/ 目錄。
# 解壓檢查 jar -tf target/your-app.war | grep WEB-INF/lib # 或使用 unzip unzip -l target/your-app.war | grep WEB-INF/lib
確認輸出包含:
WEB-INF/lib/proprietary-api-1.0.0.jar WEB-INF/lib/legacy-utils.jar WEB-INF/lib/... (其他 Maven 依賴)
| 問題 | 原因 | 解決 |
|---|---|---|
| WAR 缺少本地 JAR | 僅在 IDEA 配置 Library,未配置 maven-war-plugin | 補全 webResources 配置或安裝至 Maven 倉庫 |
編譯通過但運行報 NoClassDefFoundError | Scope 設為 Provided 或打包未包含 | 確認 Scope 為 Compile,且 WAR 內含該 JAR |
| 多模組專案子模組找不到本地 JAR | Library 未正確關聯到子模組 | 在各子模組 Dependencies 中加入 Library |
| 版本衝突 | 本地 JAR 與 Maven 依賴版本不一致 | 統一版本、使用 <exclusion> 排除傳遞性依賴 |
lib/ 目錄並納入版控(或文件化安裝步驟)。maven-war-plugin 時指定 failOnMissingWebXml=false(Servlet 3.0+ 可無 web.xml)。mvn clean package 驗證打包結果。