feat(project): initialize Spring Boot weblog project with Gradle modules

This commit is contained in:
2025-11-26 19:29:21 +08:00
commit d689a39a98
21 changed files with 358 additions and 0 deletions

3
.gitattributes vendored Normal file
View File

@@ -0,0 +1,3 @@
/gradlew text eol=lf
*.bat text eol=crlf
*.jar binary

68
.gitignore vendored Normal file
View File

@@ -0,0 +1,68 @@
# --------------------------------------------------------------------------
# Gradle 构建相关 (必须忽略)
# --------------------------------------------------------------------------
.gradle/
build/
!gradle/wrapper/gradle-wrapper.jar
!gradle/wrapper/gradle-wrapper.properties
# Gradle 缓存与日志
gradle-app.setting
.gradle-test-kit/
# --------------------------------------------------------------------------
# IntelliJ IDEA 相关 (IDE 配置文件)
# --------------------------------------------------------------------------
# 忽略旧版 IntelliJ 的输出目录
out/
# 忽略项目生成的模块文件
*.iml
*.ipr
*.iws
# .idea 文件夹处理原则:通常保留大部分配置以便团队共享,但要忽略用户个人的 workspace 设置
# 忽略个人工作区配置
.idea/workspace.xml
.idea/usage.statistics.xml
.idea/dictionaries
.idea/shelf
.idea/httpRequests
# 下面这些文件通常建议提交,方便团队统一配置,或者你换电脑后能保留配置
# .idea/encodings.xml
# .idea/compiler.xml
# .idea/misc.xml
# .idea/vcs.xml
# --------------------------------------------------------------------------
# Java & Spring Boot 通用
# --------------------------------------------------------------------------
*.class
*.log
*.ctxt
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
# 崩溃日志
hs_err_pid*
replay_pid*
# --------------------------------------------------------------------------
# 操作系统生成的文件
# --------------------------------------------------------------------------
.DS_Store
Thumbs.db
ehthumbs.db
Desktop.ini
# --------------------------------------------------------------------------
# 敏感信息 (根据需要开启,防止密钥泄露)
# --------------------------------------------------------------------------
application-prod.yml
application-dev.yml
.env

8
.idea/.gitignore generated vendored Normal file
View File

@@ -0,0 +1,8 @@
# 默认忽略的文件
/shelf/
/workspace.xml
# 基于编辑器的 HTTP 客户端请求
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

6
.idea/ApifoxUploaderProjectSetting.xml generated Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ApifoxUploaderProjectSetting">
<option name="apiAccessToken" value="APS-mJ5jVj0KjHRVPvJnChI91r8WFqR0oXhE" />
</component>
</project>

24
.idea/compiler.xml generated Normal file
View File

@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile default="true" name="Default" enabled="true" />
<profile name="Gradle Imported" enabled="true">
<outputRelativeToContentRoot value="true" />
<processorPath useClasspath="false">
<entry name="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.projectlombok/lombok/1.18.42/8365263844ebb62398e0dc33057ba10ba472d3b8/lombok-1.18.42.jar" />
</processorPath>
<module name="weblog-springboot.weblog-web.main" />
<module name="weblog-springboot.weblog-web.test" />
</profile>
</annotationProcessing>
<bytecodeTargetLevel target="21" />
</component>
<component name="JavacSettings">
<option name="ADDITIONAL_OPTIONS_OVERRIDE">
<module name="weblog-springboot.weblog-web" options="-parameters" />
<module name="weblog-springboot.weblog-web.main" options="-parameters" />
<module name="weblog-springboot.weblog-web.test" options="-parameters" />
</option>
</component>
</project>

19
.idea/gradle.xml generated Normal file
View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleMigrationSettings" migrationVersion="1" />
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/weblog-module-admin" />
<option value="$PROJECT_DIR$/weblog-module-common" />
<option value="$PROJECT_DIR$/weblog-web" />
</set>
</option>
</GradleProjectSettings>
</option>
</component>
</project>

View File

@@ -0,0 +1,12 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="PyPep8NamingInspection" enabled="true" level="WEAK WARNING" enabled_by_default="true">
<option name="ignoredErrors">
<list>
<option value="N801" />
</list>
</option>
</inspection_tool>
</profile>
</component>

10
.idea/misc.xml generated Normal file
View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="FrameworkDetectionExcludesConfiguration">
<file type="web" url="file://$PROJECT_DIR$" />
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="temurin-21" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

10
.idea/modules.xml generated Normal file
View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/weblog-springboot.iml" filepath="$PROJECT_DIR$/weblog-springboot.iml" />
<module fileurl="file://$PROJECT_DIR$/.idea/modules/weblog-web/weblog-springboot.weblog-web.main.iml" filepath="$PROJECT_DIR$/.idea/modules/weblog-web/weblog-springboot.weblog-web.main.iml" />
<module fileurl="file://$PROJECT_DIR$/.idea/modules/weblog-web/weblog-springboot.weblog-web.test.iml" filepath="$PROJECT_DIR$/.idea/modules/weblog-web/weblog-springboot.weblog-web.test.iml" />
</modules>
</component>
</project>

6
.idea/vcs.xml generated Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

49
build.gradle.kts Normal file
View File

@@ -0,0 +1,49 @@
plugins {
java
id("org.springframework.boot") version "3.5.8" apply false
id("io.spring.dependency-management") version "1.1.7" apply false
}
group = "com.hanserwei"
version = "0.0.1-SNAPSHOT"
description = "weblog-springboot"
java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
}
buildscript {
repositories {
mavenCentral()
}
}
allprojects {
group = "com.hanserwei"
version = "0.0.1-SNAPSHOT"
repositories {
mavenCentral()
}
}
subprojects {
apply(plugin = "java")
apply(plugin = "io.spring.dependency-management")
java.sourceCompatibility = JavaVersion.VERSION_21
java.targetCompatibility = JavaVersion.VERSION_21
dependencies {
compileOnly("org.projectlombok:lombok")
annotationProcessor("org.projectlombok:lombok")
testCompileOnly("org.projectlombok:lombok")
testAnnotationProcessor("org.projectlombok:lombok")
}
tasks.withType<Test> {
useJUnitPlatform()
}
}

BIN
gradle/wrapper/gradle-wrapper.jar vendored Normal file

Binary file not shown.

View File

@@ -0,0 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

5
settings.gradle.kts Normal file
View File

@@ -0,0 +1,5 @@
rootProject.name = "weblog-springboot"
include("weblog-web")
include("weblog-module-admin")
include("weblog-module-common")

View File

@@ -0,0 +1,10 @@
plugins {
java
}
dependencies {
// Test
testImplementation("org.springframework.boot:spring-boot-starter-test")
implementation(project(":weblog-module-common"))
}

View File

@@ -0,0 +1,14 @@
plugins {
java
}
dependencies {
// guava
implementation("com.google.guava:guava:33.5.0-jre")
// commons-lang3
implementation("org.apache.commons:commons-lang3:3.20.0")
// test
testImplementation("org.springframework.boot:spring-boot-starter-test")
}

View File

@@ -0,0 +1,19 @@
plugins {
id("org.springframework.boot")
id("io.spring.dependency-management")
java
}
dependencies {
// Spring Boot Web示例
implementation("org.springframework.boot:spring-boot-starter-web")
// Test
testImplementation("org.springframework.boot:spring-boot-starter-test")
// 其他依赖…
implementation(project(":weblog-module-common"))
implementation(project(":weblog-module-admin"))
}

View File

@@ -0,0 +1,11 @@
package com.hanserwei.web;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class WeblogWebApplication {
public static void main(String[] args) {
SpringApplication.run(WeblogWebApplication.class, args);
}
}

View File

@@ -0,0 +1,5 @@
spring:
application:
name: han-blog
profiles:
active: dev

View File

@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<jmxConfigurator/>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!-- 应用名称 -->
<property scope="context" name="appName" value="weblog"/>
<!-- 自定义日志输出路径,以及日志名称前缀 -->
<property name="LOG_FILE" value="/app/weblog/logs/${appName}.%d{yyyy-MM-dd}"/>
<property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n"/>
<!--<property name="CONSOLE_LOG_PATTERN" value="${FILE_LOG_PATTERN}"/>-->
<!-- 按照每天生成日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件输出的文件名 -->
<FileNamePattern>${LOG_FILE}-%i.log</FileNamePattern>
<!-- 日志文件保留天数 -->
<MaxHistory>30</MaxHistory>
<!-- 日志文件最大的大小 -->
<TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</TimeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!-- 格式化输出:%d 表示日期,%thread 表示线程名,%-5level级别从左显示 5 个字符宽度 %errorMessage日志消息%n 是换行符-->
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- dev 环境(仅输出到控制台) -->
<springProfile name="dev">
<include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
<root level="info">
<appender-ref ref="CONSOLE"/>
</root>
</springProfile>
<!-- prod 环境(仅输出到文件中) -->
<springProfile name="prod">
<include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
<root level="INFO">
<appender-ref ref="FILE"/>
</root>
</springProfile>
</configuration>

View File

@@ -0,0 +1,26 @@
package com.hanserwei.web;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import lombok.extern.slf4j.Slf4j;
@SpringBootTest
@Slf4j
class WeblogWebApplicationTests {
@Test
void contextLoads() {
}
@Test
void testLog() {
log.info("这是一行 Info 级别日志");
log.warn("这是一行 Warn 级别日志");
log.error("这是一行 Error 级别日志");
// 占位符
String author = "Hanserwei";
log.info("这是一行带有占位符日志,作者:{}", author);
}
}