我正在嘗試將 Java spring boot (Maven) 專案打包到 JAR 檔案中。這樣我就可以將該 JAR 檔案放入另一臺計算機并簡單地運行它。該檔案是在“目標”檔案夾中創建的。我可以通過以下方式正常運行專案:
java -jar target/project.jar
但是每當我將 Jar 檔案帶到另一個地方(例如,進入另一臺 PC)并嘗試像這樣運行時:
java -jar project.jar
它在 - localhost:8080處顯示白標錯誤 404 頁面
如何打包專案以作為獨立 JAR 檔案運行而不會出現任何此類錯誤?
這是我的application.properties檔案內容:
spring.datasource.url=jdbc:mariadb://localhost:3306/sample
spring.datasource.username=root
spring.datasource.password=****
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDB103Dialect
spring.jpa.hibernate.ddl-auto=update
## MULTIPART (MultipartProperties)
# Enable multipart uploads
spring.servlet.multipart.enabled=true
# Threshold after which files are written to disk.
spring.servlet.multipart.file-size-threshold=2KB
# Max file size.
spring.servlet.multipart.max-file-size=200MB
# Max Request Size
spring.servlet.multipart.max-request-size=215MB
## File Storage Properties
# All files uploaded through the REST API will be stored in this directory
file.upload-dir=/Users/noticepush/notices
spring.mvc.view.prefix: /WEB-INF/jsp/
spring.mvc.view.suffix: .jsp
這是我的pom.xml內容:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.1</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.tech</groupId>
<artifactId>StressDetection</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>StressDetection</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.4.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
對我有什么建議嗎?
注意:請不要建議使用 WAR 包裝。我正在嘗試將專案作為 JAR 包分發。
uj5u.com熱心網友回復:
spring.datasource.url=jdbc:mariadb://localhost:3306/sample 您的應用程式在某些本地資料庫中有依賴關系。
可能是您的計算機中存在資料庫并且應用程式可以訪問該資料庫,因此應用程式可以正確啟動和播放。
在其他計算機上,資料庫可能不存在或可能無法從應用程式訪問,因此 Spring 背景關系在初始化期間失敗,因此您無法訪問 Web 應用程式!
如果如評論中所指出的,這不是問題,那么也可能存在另一個問題。
您可以在您的 pom.xml
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
和
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
所以最終的 Jar 是一個重新打包的 Fat jar,它還包含所需的所有運行時依賴項。
uj5u.com熱心網友回復:
我過去收到此類錯誤您遇到此錯誤是因為沒有用于 spring boot 的默認 webPage 帶有錯誤的螢屏截圖
要修復它,你只需要index.html在你里面添加一個簡單的 html 檔案 ( ) 。src/main/resources/statics directory
uj5u.com熱心網友回復:
問題是當您使用 java -*.jar 部署任何 springboot 應用程式時,jsp 檔案將不會出現在嵌入式 tomcat 中,并且在嘗試提供請求時,您將收到 404 PAGE NOT FOUND。這是因為 jar 打包,jsp 檔案沒有從 WEB-INF 檔案夾中復制。如果在使用 jar 作為打包的同時將 jsp 檔案保存在 META-INF/resources 檔案夾下,它應該可以作業。
相關問題:為什么Spring boot不支持jsp,如果我們添加正確的jar參考,它可以呈現頁面
uj5u.com熱心網友回復:
在這種情況下,您可能必須配置視圖決議器。通常我們將 JSP 檔案放在 ${project.basedir}/main/webapp/WEB-INF/jsp/ 中。在這種情況下,您必須在 application.properties 中添加以下 2 個配置引數。
spring.mvc.view.prefix: /WEB-INF/jsp/
spring.mvc.view.suffix: .jsp
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/407143.html
標籤:
