史上最全maven中的pom詳述
maven中的pom詳述
什么是POM?
POM(Project Object Model)是maven的基本工作單元。它是一個 XML 文件,其中包含有關(guān)項目的信息以及 Maven 用于構(gòu)建項目的配置詳細信息。簡單來說:POM(pom.xml)就是整個工程的項目規(guī)劃書,它定義了項目的所有細節(jié):需要什么材料(依賴)、由誰建造(開發(fā)者信息)、如何建造(構(gòu)建配置)、以及項目的版本等。
超級POM
超級 POM 是 Maven 的默認 POM。除非顯式設(shè)置,否則所有 POM 都會擴展超級 POM,這意味著超級 POM 中指定的配置將為項目創(chuàng)建的 POM 繼承。超級POM可以理解為MAVEN世界的憲法,所有maven項目都必須遵守。超級POM中定義了一些默認配置,下面列舉幾個:
默認目錄結(jié)構(gòu)
<!-- 源代碼目錄 -->
<sourceDirectory>src/main/java</sourceDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
<!-- 測試代碼目錄 -->
<testSourceDirectory>src/test/java</testSourceDirectory>
<testResources>
<testResource>
<directory>src/test/resources</directory>
</testResource>
</testResources>
<!-- 輸出目錄 -->
<outputDirectory>target/classes</outputDirectory>
<testOutputDirectory>target/test-classes</testOutputDirectory>這就是為什么所有 Maven 項目都長得一樣的原因。
默認倉庫配置
<repositories>
<repository>
<id>central</id>
<name>Central Repository</name>
<url>https://repo.maven.apache.org/maven2</url>
</repository>
</repositories>所有依賴默認都從 Maven 中央倉庫下載。
默認插件配置及默認插件版本管理
| 構(gòu)建階段 | 默認插件 | 作用 |
|---|---|---|
compile | maven-compiler-plugin | 編譯源代碼 |
test | maven-surefire-plugin | 運行單元測試 |
package | maven-jar-plugin | 打包成 JAR 文件 |
install | maven-install-plugin | 安裝到本地倉庫 |
對不同構(gòu)建階段綁定了不同的插件。
默認打包配置
<!-- 默認打包方式就是 JAR --> <packaging>jar</packaging>
最小的 POM
POM 用三坐標(biāo)(groupId、artifactId、version)的方式唯一標(biāo)識一個項目??梢岳斫獬身椖康?strong>身份證。如:
<project> <!-- 說:這是個項目 --> <modelVersion>4.0.0</modelVersion> <!-- 說:用第4版規(guī)則 --> <groupId>com.mycompany.app</groupId> <!-- 姓:公司/組織名 --> <artifactId>my-app</artifactId> <!-- 名:項目具體叫啥 --> <version>1</version> <!-- 排行:這是第幾個版本 --> </project>
POM核心元素
一個標(biāo)準(zhǔn)的 POM 文件包含以下核心元素:
坐標(biāo)(Coordinates) - 項目的唯一標(biāo)識
- groupId: 定義項目所屬的實際組織或公司,通常使用反向域名。例如:com.google.guava。
- artifactId: 定義實際項目(模塊)的名稱。例如:guava。
- version: 定義項目的當(dāng)前版本。例如:31.1-jre。SNAPSHOT:表示不穩(wěn)定、尚在開發(fā)中的版本。RELEASE:表示穩(wěn)定的發(fā)布版本。
- packaging: 定義項目的打包方式。默認為 jar。其他常見值:war, ear, pom(用于聚合或父POM)。
這三個元素(groupId, artifactId, version)合稱為GAV,是 Maven 世界的唯一身份證。
依賴管理(Dependencies)
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
<optional>false</optional>
<exclusions>
<exclusion>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>- scope: 依賴范圍 : compile: 默認值。對編譯、測試、運行都有效。
- provided: 表示 JDK 或容器在運行時已提供(如 servlet-api)。只在編譯和測試時使用。
- runtime: 編譯時不需要,但測試和運行時需要(如 JDBC 驅(qū)動)。
- test: 只在測試時使用(如 JUnit)。
- system: 與 provided 類似,但必須通過 systemPath 顯式指定路徑(不推薦)。
- import: 僅用于 dependencyManagement 部分,用于從其他 POM 導(dǎo)入依賴管理。
- optional: 標(biāo)記依賴是否為可選。如果為 true,其他項目依賴本項目時,該依賴不會被傳遞?!驹O(shè)你開發(fā)了一個核心軟件,這個軟件支持多種數(shù)據(jù)庫(MySQL、PostgreSQL等),但是你不希望強制使用你軟件的人必須包含所有數(shù)據(jù)庫驅(qū)動。你可以把數(shù)據(jù)庫驅(qū)動設(shè)置為可選。這樣,當(dāng)別人在他的項目中引入你的軟件時,他不會自動獲得所有這些數(shù)據(jù)庫驅(qū)動,他需要明確指定他需要哪個驅(qū)動(在自己的pom里面單獨引入)】,具體而言:
<project>
<groupId>com.example</groupId>
<artifactId>project-A</artifactId>
<version>1.0.0</version>
...
<dependencies>
<!-- 可選依賴:MySQL驅(qū)動 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
<optional>true</optional>
</dependency>
<!-- 可選依賴:PostgreSQL驅(qū)動 -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.3.6</version>
<optional>true</optional>
</dependency>
</dependencies>
</project>現(xiàn)在,有另一個項目project-B依賴了project-A:
<project>
<groupId>com.example</groupId>
<artifactId>project-B</artifactId>
<version>1.0.0</version>
...
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>project-A</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
</project>那么,project-B不會自動傳遞依賴MySQL和PostgreSQL驅(qū)動。如果project-B需要用到MySQL,那么它必須在自己的POM中顯式聲明MySQL驅(qū)動。
- exclusions: 排除傳遞性依賴,用于解決依賴沖突。
父 POM 與繼承(Parent)
用于從父 POM 繼承配置,實現(xiàn)統(tǒng)一管理。類似于JAVA中的繼承。
注意點:
- 父POM的packaging必須是pom。
- 子POM通過元素指定父POM,其中g(shù)roupId、artifactId、version必須與父POM的坐標(biāo)一致。
- relativePath:指定查找父POM的相對路徑。默認值是…/pom.xml,即先從本地文件系統(tǒng)查找,如果沒找到,再從倉庫查找。
- 如果設(shè)置為空,則表示不從相對路徑查找,直接從倉庫查找。
- 繼承的內(nèi)容:父POM中定義的依賴、插件、屬性、依賴管理、插件管理等都可以被繼承。
總的來說:
- 父POM:統(tǒng)一配置、依賴版本、默認設(shè)置。
- 子POM:繼承配置、使用依賴、覆蓋配置【可以有個性】。
relativePath規(guī)則:
| 設(shè)置方式 | 策略 | 適用場景 |
|---|---|---|
<relativePath/></font>空標(biāo)簽 | 1. 去本地倉庫找 2. 去遠程倉庫找 | 父POM是知名框架(Spring Boot) |
<relativePath>../pom.xml</relativePath></font> | 1. 去…/pom.xml找 2. 找不到再去倉庫 | 父POM在本地項目里 |
示例1:
子pom文件:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.0</version>
<relativePath/>
</parent>
<artifactId>my-app</artifactId>
<!-- 只寫了自己的名字,其他都沒寫 -->實際生效的配置:
<!-- 自動獲得老爸的配置 -->
<properties>
<java.version>11</java.version> <!-- Java 11 -->
<maven.compiler.source>11</maven.compiler.source>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- 自動獲得依賴版本管理 -->
<dependencyManagement>
<!-- Spring Boot 2.7.0 兼容的所有版本 -->
<spring.version>5.3.20</spring.version>
<jackson.version>2.13.3</jackson.version>
<!-- ... -->
</dependencyManagement>
<!-- 自動獲得插件配置 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>項目聚合(Modules)
目的:用于將多個模塊/子項目聚合在一起,以便一次性構(gòu)建整個項目。
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany</groupId>
<artifactId>my-app-aggregator</artifactId>
<version>1.0</version>
<packaging>pom</packaging> <!-- 必須為pom -->
<modules>
<module>core-module</module> <!-- 相對路徑,表示聚合項目目錄下的core-module目錄 -->
<module>service-module</module>
<module>web-module</module>
</modules>
</project>這通常用在父 POM(其 packaging 為 pom)中。聚合項目本身可以沒有源碼,它只是作為一個構(gòu)建的入口。在聚合項目目錄下執(zhí)行mvn命令,Maven會根據(jù)模塊間的依賴關(guān)系自動確定構(gòu)建順序,依次構(gòu)建每個模塊。
聚合和繼承經(jīng)常結(jié)合使用:聚合項目同時作為父項目,提供統(tǒng)一的配置管理。這種情況下,聚合項目的pom.xml中既有也有等配置。
示例:
- 父pom
<project>
<modelVersion>4.0.0</modelVersion>
<!-- 聚合項目的身份證 -->
<groupId>com.mycompany</groupId>
<artifactId>ecommerce-platform</artifactId>
<version>1.0.0</version>
<!-- 關(guān)鍵:打包方式必須是pom -->
<packaging>pom</packaging>
<!-- 聚合的核心:列出所有小弟 -->
<modules>
<module>user-service</module> <!-- 用戶服務(wù)模塊 -->
<module>product-service</module> <!-- 商品服務(wù)模塊 -->
<module>order-service</module> <!-- 訂單服務(wù)模塊 -->
<module>common</module> <!-- 公共模塊 -->
</modules>
<!-- 注意:聚合項目可以同時是父項目 -->
<properties>
<java.version>11</java.version>
<spring-boot.version>2.7.0</spring-boot.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- 統(tǒng)一的依賴版本管理 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>- 子模塊的配置(以user-service為例)
<!-- user-service/pom.xml -->
<project>
<modelVersion>4.0.0</modelVersion>
<!-- 既可以認父(繼承),又可以被聚合 -->
<parent>
<groupId>com.mycompany</groupId>
<artifactId>ecommerce-platform</artifactId>
<version>1.0.0</version>
<relativePath>../pom.xml</relativePath>
</parent>
<!-- 自己的身份證 -->
<artifactId>user-service</artifactId>
<packaging>jar</packaging> <!-- 子模塊通常是jar或war -->
<dependencies>
<!-- 依賴common模塊 -->
<dependency>
<groupId>com.mycompany</groupId>
<artifactId>common</artifactId>
<version>${project.version}</version>
</dependency>
<!-- 其他業(yè)務(wù)依賴 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>- 對比:
不使用聚合:
# 要跑4次命令,還要注意構(gòu)建順序! cd common && mvn clean install cd ../user-service && mvn clean install cd ../product-service && mvn clean install cd ../order-service && mvn clean install
使用后:
# 在聚合項目根目錄,一次搞定! cd ecommerce-platform mvn clean install # Maven自動處理: # 1. 分析模塊依賴關(guān)系(common → user-service → ...) # 2. 按正確順序構(gòu)建 # 3. 一次性輸出所有結(jié)果
- 一般微服務(wù)項目結(jié)構(gòu)示例:
platform/ ├── pom.xml(聚合所有微服務(wù)) ├── gateway/(網(wǎng)關(guān)服務(wù)) ├── user-service/(用戶服務(wù)) ├── order-service/(訂單服務(wù)) └── product-service/(商品服務(wù))
屬性(Properties)
用于定義變量,方便統(tǒng)一管理和復(fù)用,常見在父POM中定義公共屬性。
<properties>
<java.version>11</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<spring.version>5.3.20</spring.version>
</properties>
<!-- 在依賴中使用屬性 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>屬性的常見用法:
- 定義公共屬性,如上。
- 多環(huán)境配置【開發(fā)、測試、生產(chǎn)環(huán)境用不同配置】
<properties>
<!-- 默認開發(fā)環(huán)境配置 -->
<env>dev</env>
<server.port>8080</server.port>
<database.url>jdbc:mysql://localhost:3306/dev</database.url>
</properties>
<profiles>
<profile>
<id>prod</id>
<properties>
<!-- 生產(chǎn)環(huán)境覆蓋默認值 -->
<env>prod</env>
<server.port>80</server.port>
<database.url>jdbc:mysql://prod-server:3306/prod</database.url>
</properties>
</profile>
</profiles>構(gòu)建配置(Build)
用于配置構(gòu)建過程中的插件和行為。
構(gòu)建配置可以包含兩個主要部分:
- :用于管理插件的版本和配置,類似于依賴管理,它本身不會實際引入插件,只是提供一種統(tǒng)一管理的方式。子項目可以繼承并引用這些插件,而無需指定版本。
- :實際使用的插件列表,在這里配置的插件會在構(gòu)建過程中執(zhí)行。
此外,構(gòu)建配置還包括:
- resources : 定義資源文件(非代碼文件)如何處理,例如配置文件、圖片等。
- testResources:定義測試資源文件如何處理。
- directory: 構(gòu)建輸出目錄,默認為target。
- outputDirectory: 編譯后的class文件輸出目錄,默認為target/classes。
- testOutputDirectory: 測試類編譯輸出目錄,默認為target/test-classes。
- sourceDirectory: 源代碼目錄,默認為src/main/java。
- testSourceDirectory: 測試代碼目錄,默認為src/test/java。
一般為:
<build>
<!-- 1. 源代碼目錄(可以改默認位置) -->
<sourceDirectory>src/main/java</sourceDirectory>
<testSourceDirectory>src/test/java</testSourceDirectory>
<!-- 2. 資源文件處理 -->
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering> <!-- 是否替換占位符 -->
</resource>
</resources>
<!-- 3. 插件管理(父POM中用) -->
<pluginManagement>
<plugins>
<!-- 定義插件版本和基礎(chǔ)配置 -->
</plugins>
</pluginManagement>
<!-- 4. 實際使用的插件 -->
<plugins>
<!-- 具體配置每個插件 -->
</plugins>
<!-- 5. 擴展(自定義組件) -->
<extensions>
<!-- 擴展Maven核心功能 -->
</extensions>
</build>- 示例1:
<build>
<plugins>
<!-- Spring Boot打包插件 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.7.0</version>
<configuration>
<mainClass>com.mycompany.app.Application</mainClass>
<!-- lombok只在編譯時起作用,已經(jīng)變成class了,不需要再打jar包依賴了 -->
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal> <!-- 生成可執(zhí)行JAR -->
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>- 示例2:
<!-- 在父POM中統(tǒng)一管理插件版本 -->
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<!-- 在子POM中引用,不需要寫版本 -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<!-- 版本從父POM繼承 -->
</plugin>
</plugins>
</build>- 示例3:
<profiles>
<profile>
<id>production</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>true</skipTests> <!-- 生產(chǎn)環(huán)境跳過測試 -->
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources-prod</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
</profile>
</profiles>依賴管理(DependencyManagement)
: 只是一個聲明,它并不實際引入依賴。它主要用于統(tǒng)一管理子模塊或項目的依賴版本。子模塊需要顯式聲明依賴,但可以省略 version。如:
示例1:
- 父pom
<dependencyManagement>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
</dependencies>
</dependencyManagement>- 子模塊 POM:
<dependencies>
<!-- 不需要寫版本,版本由父POM統(tǒng)一管理 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>示例2:
<!-- 直接使用Spring Boot定義的所有版本 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.7.0</version>
<type>pom</type>
<scope>import</scope> <!-- 關(guān)鍵:導(dǎo)入整個版本表 -->
</dependency>
</dependencies>
</dependencyManagement>
<!-- 現(xiàn)在所有Spring Boot相關(guān)的依賴都不用寫版本了 -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 自動使用2.7.0對應(yīng)的版本 -->
</dependency>
</dependencies>關(guān)鍵標(biāo)簽:合并另一個POM的依賴管理。類似于繼承別人的dependencyManagement一樣。
當(dāng)父POM中配置了,子模塊繼承的是依賴的管理規(guī)則(主要是版本信息),而不是依賴本身。這帶來了幾個顯著優(yōu)勢:
- 統(tǒng)一版本管理: 所有子模塊在引用父POM中聲明過的依賴時,只需指定groupId和artifactId,版本號會統(tǒng)一使用父POM中的定義。這能有效避免多模塊間的依賴版本沖突。
- 版本靈活性與覆蓋: 如果某個子模塊需要特殊版本,它可以在自己的中明確聲明版本號,此時子模塊的版本號具有優(yōu)先級,會覆蓋父POM中的定義。這為特殊需求的模塊提供了靈活性。
- 按需引入依賴: 子模塊只聲明自己真正需要的依賴,避免了父POM中所有依賴被自動繼承可能導(dǎo)致的冗余和潛在沖突。這讓每個模塊的依賴更清晰、更精簡。
Profile
Profile 允許為不同的環(huán)境(如開發(fā)、測試、生產(chǎn))定義不同的配置。它能夠覆蓋 POM 中的默認配置。
<profiles>
<profile>
<id>dev</id>
<properties>
<db.url>jdbc:mysql://localhost:3306/dev</db.url>
</properties>
<activation>
<activeByDefault>true</activeByDefault> <!-- 默認激活 -->
</activation>
</profile>
<profile>
<id>prod</id>
<properties>
<db.url>jdbc:mysql://prod-server:3306/prod</db.url>
</properties>
</profile>
</profiles># 用命令激活 mvn clean install -P prod
一個相對完整的POM
<?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
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 坐標(biāo) -->
<groupId>com.example</groupId>
<artifactId>my-webapp</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>My Web Application</name>
<!-- 父POM -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.0</version>
</parent>
<!-- 屬性 -->
<properties>
<java.version>11</java.version>
<junit.version>5.8.2</junit.version>
</properties>
<!-- 依賴管理 -->
<dependencyManagement>
<dependencies>
<!-- 可以在這里管理非Spring Boot管理的依賴 -->
</dependencies>
</dependencyManagement>
<!-- 依賴 -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<!-- 構(gòu)建配置 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<!-- 多環(huán)境配置 -->
<profiles>
<profile>
<id>dev</id>
<properties>
<activatedProperties>dev</activatedProperties>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>prod</id>
<properties>
<activatedProperties>prod</activatedProperties>
</properties>
</profile>
</profiles>
</project>到此這篇關(guān)于史上最全maven中的pom詳述的文章就介紹到這了,更多相關(guān)maven pom內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Maven POM文件配置打造高效項目管理的完整指南
- Maven特殊pom.xml配置文件-BOM解讀
- 通過maven給沒有pom文件的jar包生成pom文件,maven項目引入本地jar包方式
- Maven pom的distributionManagement配置方式
- 關(guān)于Maven中pom.xml文件配置詳解
- SpringBoot Maven 項目 pom 中的 plugin 插件用法小結(jié)
- 基于Maven pom文件使用分析
- maven關(guān)于pom文件中的relativePath標(biāo)簽使用
- 關(guān)于maven install報錯原因揭秘:parent.relativePath指向錯誤的本地POM文件
相關(guān)文章
Java?Stream流中的filter()使用方法舉例詳解
filter()是Java?Stream?API中的中間操作,用于根據(jù)給定的Predicate條件篩選流中的元素,它通過接收一個返回boolean值的函數(shù)(斷言)作為參數(shù),篩選出滿足條件的元素并收集到新的流中,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-11-11
selenium+java+chrome環(huán)境搭建的方法步驟
這篇文章主要介紹了selenium+java+chrome環(huán)境搭建的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
Java Volatile關(guān)鍵字實現(xiàn)原理過程解析
這篇文章主要介紹了Java Volatile關(guān)鍵字實現(xiàn)原理過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-03-03
Spring security如何實現(xiàn)記錄用戶登錄時間功能
這篇文章主要介紹了Spring security如何實現(xiàn)記錄用戶登錄時間功能,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-03-03
Java如果在try里面執(zhí)行return還會不會執(zhí)行finally
這篇文章主要介紹了Java如果在try里面執(zhí)行return,那么還會不會執(zhí)行finally,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01
Springboot項目編譯后未能加載靜態(tài)資源文件的問題
這篇文章主要介紹了Springboot項目編譯后未能加載靜態(tài)資源文件的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08
Spring?Boot使用Schedule實現(xiàn)定時任務(wù)的方法
這篇文章主要介紹了Spring?Boot使用Schedule實現(xiàn)定時任務(wù),本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-03-03

