寧夏建設(shè)工程招標(biāo)投標(biāo)管理中心網(wǎng)站百度推廣網(wǎng)頁(yè)版
關(guān)于使用Gradle結(jié)合SpringBoot進(jìn)行多模塊開發(fā)。
本來(lái)是打算使用buildSrc之類的,但是感覺好像好麻煩,使用這種方法就可以實(shí)現(xiàn),沒必要采用其他的。
我不怎么會(huì)表述,可能寫的跟粑粑一樣,哈哈哈哈
這是我的項(xiàng)目地址。
存在gitee,會(huì)一直更新
TinaSprout
首先這是模塊的目錄結(jié)構(gòu)
C:\USERS\MI\CODESPACE\IDEAPROJECTS\TINASPROUT
│ .gitignore
│ build.gradle
│ gradlew
│ gradlew.bat
│ LICENSE
│ settings.gradle
│
├─.gradle
│ ├─7.6.1
│ │ │ gc.properties
│ │ │
│ │ ├─checksums
│ │ │ checksums.lock
│ │ │ md5-checksums.bin
│ │ │ sha1-checksums.bin
│ │ │
│ │ ├─dependencies-accessors
│ │ │ dependencies-accessors.lock
│ │ │ gc.properties
│ │ │
│ │ ├─executionHistory
│ │ │ executionHistory.bin
│ │ │ executionHistory.lock
│ │ │
│ │ ├─fileChanges
│ │ │ last-build.bin
│ │ │
│ │ ├─fileHashes
│ │ │ fileHashes.bin
│ │ │ fileHashes.lock
│ │ │ resourceHashesCache.bin
│ │ │
│ │ └─vcsMetadata
│ ├─buildOutputCleanup
│ │ buildOutputCleanup.lock
│ │ cache.properties
│ │ outputFiles.bin
│ │
│ └─vcs-1
│ gc.properties
│
├─.idea
│ │ compiler.xml
│ │ git_toolbox_prj.xml
│ │ gradle.xml
│ │ jarRepositories.xml
│ │ misc.xml
│ │ modules.xml
│ │ vcs.xml
│ │ workspace.xml
│ │
│ └─modules
│ ├─tinasprout-core
│ │ TinaSprout.tinasprout-core.main.iml
│ │
│ └─tinasprout-robot
│ TinaSprout.tinasprout-robot.main.iml
│
├─gradle
│ └─wrapper
│ gradle-wrapper.jar
│ gradle-wrapper.properties
│
├─tinasprout-core
│ │ .gitignore
│ │ build.gradle
│ │ gradlew
│ │ gradlew.bat
│ │
│ ├─gradle
│ │ └─wrapper
│ │ gradle-wrapper.jar
│ │ gradle-wrapper.properties
│ │
│ └─src
│ ├─main
│ │ ├─java
│ │ │ └─com
│ │ │ └─wuxianggujun
│ │ │ └─tinasproutcore
│ │ │ │ TinaSproutCoreApplication.java
│ │ │ │
│ │ │ ├─config
│ │ │ │ BotConfig.java
│ │ │ │
│ │ │ └─network
│ │ │ WsHandler.java
│ │ │
│ │ └─resources
│ │ │ application.properties
│ │ │
│ │ ├─static
│ │ └─templates
│ └─test
│ └─java
│ └─com
│ └─wuxianggujun
│ └─tinasproutcore
│ TinaSproutCoreApplicationTests.java
│
└─tinasprout-robot│ .gitignore│ build.gradle│ gradlew│ gradlew.bat│├─gradle│ └─wrapper│ gradle-wrapper.jar│ gradle-wrapper.properties│└─src├─main│ ├─java│ │ └─com│ │ └─wuxianggujun│ │ └─tinasproutrobot│ │ TinasproutRobotApplication.java│ ││ └─resources│ │ application.properties│ ││ ├─static│ └─templates└─test└─java└─com└─wuxianggujun└─tinasproutrobotTinasproutRobotApplicationTests.java
步驟就是,現(xiàn)在創(chuàng)建一個(gè)Gradle項(xiàng)目,取名為TinaSprout(當(dāng)然,這是我項(xiàng)目的名字,你們隨便取)然后刪除src的目錄,用不到。
然后新建兩個(gè)子模塊tinasprout-core、tinasprout-robot。
tinasprout-core ----- 是用來(lái)寫核心框架的。
tinasprout-robot -----是SpringBoot啟動(dòng)項(xiàng)目。
將兩個(gè)子模塊的settings.gradle刪除,不需要。
完成之后開始編寫我們根目錄的settings.gradle文件,將兩個(gè)子模塊引入。
rootProject.name = 'TinaSprout'
include 'tinasprout-core'
include 'tinasprout-robot'
現(xiàn)在我們開始編寫根目錄的build.gradle,用于管理子模塊
buildscript {repositories {mavenLocal()maven {url 'https://repo.huaweicloud.com/repository/maven/'}}dependencies {classpath("org.springframework.boot:spring-boot-gradle-plugin:3.0.4")}
}plugins {id 'java'id 'org.springframework.boot' version '3.0.4' apply false//apply false的作用是告訴Gradle不要執(zhí)行插件的邏輯,只是聲明依賴id 'io.spring.dependency-management' version '1.1.0'
}allprojects {apply plugin: 'java'group 'com.wuxianggujun'version '1.0-SNAPSHOT'sourceCompatibility = '17'configurations {compileOnly {extendsFrom annotationProcessor}}repositories {mavenCentral()maven {url 'https://repo.huaweicloud.com/repository/maven/'}}dependencies {testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'}tasks.withType(JavaCompile) {options.encoding = "UTF-8"}}subprojects {apply plugin: 'org.springframework.boot'apply plugin: 'io.spring.dependency-management'dependencyManagement {imports {mavenBom "org.springframework.boot:spring-boot-dependencies:3.0.4"}}dependencies {implementation 'org.springframework.boot:spring-boot-starter'implementation 'org.springframework.boot:spring-boot-starter-web'compileOnly 'org.projectlombok:lombok'developmentOnly 'org.springframework.boot:spring-boot-devtools'annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'annotationProcessor 'org.projectlombok:lombok'testImplementation 'org.springframework.boot:spring-boot-starter-test'}tasks.named('test') {useJUnitPlatform()}}
通過(guò)上面的build.gradle配置文件,設(shè)置了allprojects和subprojects用于定義一些共用的內(nèi)容。反正不難,應(yīng)該看得懂吧!
接下來(lái)是tinasprout-core,我是想將這個(gè)打包成jar包,供給tinasprout-robot使用。所以指定bootjar的enabled為false,jar 的enabled為true
bootJar{enabled(false)archiveBaseName = 'tinasprout-core'archiveVersion = '0.0.1-SNAPSHOT'
}jar{enabled = true
}dependencies {implementation "com.alibaba:fastjson:1.2.83"implementation 'io.netty:netty-all:4.1.86.Final'
}
接下來(lái),我們看tinasprout-robot的配置文件,這是用于部署在服務(wù)器啟動(dòng)SpringBoot的。
springBoot {mainClass = 'com.wuxianggujun.tinasproutrobot.TinasproutRobotApplication'
}bootJar {archiveBaseName = 'TinaSprout'archiveVersion = '0.0.1-SNAPSHOT'// 將子模塊一起打包進(jìn)來(lái)includeEmptyDirs = true// 設(shè)置輸出目錄,相對(duì)于項(xiàng)目根目錄destinationDirectory = file("$rootDir/build")
}dependencies {implementation project(':tinasprout-core')
}
指定springBoot的mainClass,用于在jar啟動(dòng)的時(shí)候可以運(yùn)行springboot。
bootJar的一些屬性,是我自己假的,當(dāng)然你們也可以刪除,不影響。
我是要添加這些是要將這個(gè)jar包,部署在服務(wù)器,所以修改名稱輸出在根目錄的build文件下。
通過(guò)運(yùn)行bootjar將SpringBoot項(xiàng)目打包成jar包,我們就可以在build目錄中看見。
現(xiàn)在項(xiàng)目模塊化已經(jīng)完成了,我也不知道應(yīng)該搞什么。直接來(lái)運(yùn)行看看效果吧。
打開終端,將文件夾拖動(dòng)到當(dāng)前目錄,我們使用命令來(lái)查看一下jar包。
使用這條命令查看,這個(gè)命令用于查看一個(gè) JAR 文件中包含的所有文件和目錄,可以用來(lái)確認(rèn) JAR 文件中是否包含了需要的類和資源文件。
jar tf .\TinaSprout-0.0.1-SNAPSHOT.jar //其他命令
jar tf <jar包> | grep 'BOOT-INF/lib'
jar tf <jar包> | grep 'BOOT-INF/classes'
這是輸出內(nèi)容,可以看到tinasprout-core-1.0-SNAPSHOT-plain已經(jīng)被打包進(jìn)去了。
META-INF/
META-INF/MANIFEST.MF
org/
org/springframework/
org/springframework/boot/
org/springframework/boot/loader/
org/springframework/boot/loader/ClassPathIndexFile.class
org/springframework/boot/loader/ExecutableArchiveLauncher.class
org/springframework/boot/loader/JarLauncher.class
org/springframework/boot/loader/LaunchedURLClassLoader$DefinePackageCallType.class
org/springframework/boot/loader/LaunchedURLClassLoader$UseFastConnectionExceptionsEnumeration.class
org/springframework/boot/loader/LaunchedURLClassLoader.class
org/springframework/boot/loader/Launcher.class
org/springframework/boot/loader/MainMethodRunner.class
org/springframework/boot/loader/PropertiesLauncher$ArchiveEntryFilter.class
org/springframework/boot/loader/PropertiesLauncher$ClassPathArchives.class
org/springframework/boot/loader/PropertiesLauncher$PrefixMatchingArchiveFilter.class
org/springframework/boot/loader/PropertiesLauncher.class
org/springframework/boot/loader/WarLauncher.class
org/springframework/boot/loader/archive/
org/springframework/boot/loader/archive/Archive$Entry.class
org/springframework/boot/loader/archive/Archive$EntryFilter.class
org/springframework/boot/loader/archive/Archive.class
org/springframework/boot/loader/archive/ExplodedArchive$AbstractIterator.class
org/springframework/boot/loader/archive/ExplodedArchive$ArchiveIterator.class
org/springframework/boot/loader/archive/ExplodedArchive$EntryIterator.class
org/springframework/boot/loader/archive/ExplodedArchive$FileEntry.class
org/springframework/boot/loader/archive/ExplodedArchive$SimpleJarFileArchive.class
org/springframework/boot/loader/archive/ExplodedArchive.class
org/springframework/boot/loader/archive/JarFileArchive$AbstractIterator.class
org/springframework/boot/loader/archive/JarFileArchive$EntryIterator.class
org/springframework/boot/loader/archive/JarFileArchive$JarFileEntry.class
org/springframework/boot/loader/archive/JarFileArchive$NestedArchiveIterator.class
org/springframework/boot/loader/archive/JarFileArchive.class
org/springframework/boot/loader/data/
org/springframework/boot/loader/data/RandomAccessData.class
org/springframework/boot/loader/data/RandomAccessDataFile$DataInputStream.class
org/springframework/boot/loader/data/RandomAccessDataFile$FileAccess.class
org/springframework/boot/loader/data/RandomAccessDataFile.class
org/springframework/boot/loader/jar/
org/springframework/boot/loader/jar/AbstractJarFile$JarFileType.class
org/springframework/boot/loader/jar/AbstractJarFile.class
org/springframework/boot/loader/jar/AsciiBytes.class
org/springframework/boot/loader/jar/Bytes.class
org/springframework/boot/loader/jar/CentralDirectoryEndRecord$Zip64End.class
org/springframework/boot/loader/jar/CentralDirectoryEndRecord$Zip64Locator.class
org/springframework/boot/loader/jar/CentralDirectoryEndRecord.class
org/springframework/boot/loader/jar/CentralDirectoryFileHeader.class
org/springframework/boot/loader/jar/CentralDirectoryParser.class
org/springframework/boot/loader/jar/CentralDirectoryVisitor.class
org/springframework/boot/loader/jar/FileHeader.class
org/springframework/boot/loader/jar/Handler.class
org/springframework/boot/loader/jar/JarEntry.class
org/springframework/boot/loader/jar/JarEntryCertification.class
org/springframework/boot/loader/jar/JarEntryFilter.class
org/springframework/boot/loader/jar/JarFile$1.class
org/springframework/boot/loader/jar/JarFile$JarEntryEnumeration.class
org/springframework/boot/loader/jar/JarFile.class
org/springframework/boot/loader/jar/JarFileEntries$1.class
org/springframework/boot/loader/jar/JarFileEntries$EntryIterator.class
org/springframework/boot/loader/jar/JarFileEntries$Offsets.class
org/springframework/boot/loader/jar/JarFileEntries$Zip64Offsets.class
org/springframework/boot/loader/jar/JarFileEntries$ZipOffsets.class
org/springframework/boot/loader/jar/JarFileEntries.class
org/springframework/boot/loader/jar/JarFileWrapper.class
org/springframework/boot/loader/jar/JarURLConnection$1.class
org/springframework/boot/loader/jar/JarURLConnection$JarEntryName.class
org/springframework/boot/loader/jar/JarURLConnection.class
org/springframework/boot/loader/jar/StringSequence.class
org/springframework/boot/loader/jar/ZipInflaterInputStream.class
org/springframework/boot/loader/jarmode/
org/springframework/boot/loader/jarmode/JarMode.class
org/springframework/boot/loader/jarmode/JarModeLauncher.class
org/springframework/boot/loader/jarmode/TestJarMode.class
org/springframework/boot/loader/util/
org/springframework/boot/loader/util/SystemPropertyUtils.class
BOOT-INF/
BOOT-INF/classes/
BOOT-INF/classes/com/
BOOT-INF/classes/com/wuxianggujun/
BOOT-INF/classes/com/wuxianggujun/tinasproutrobot/
BOOT-INF/classes/com/wuxianggujun/tinasproutrobot/TinasproutRobotApplication.class
BOOT-INF/classes/application.properties
BOOT-INF/lib/
BOOT-INF/lib/tinasprout-core-1.0-SNAPSHOT-plain.jar
BOOT-INF/lib/spring-boot-autoconfigure-3.0.4.jar
BOOT-INF/lib/spring-boot-3.0.4.jar
BOOT-INF/lib/jakarta.annotation-api-2.1.1.jar
BOOT-INF/lib/spring-webmvc-6.0.6.jar
BOOT-INF/lib/spring-web-6.0.6.jar
BOOT-INF/lib/spring-context-6.0.6.jar
BOOT-INF/lib/spring-aop-6.0.6.jar
BOOT-INF/lib/spring-beans-6.0.6.jar
BOOT-INF/lib/spring-expression-6.0.6.jar
BOOT-INF/lib/spring-core-6.0.6.jar
BOOT-INF/lib/snakeyaml-1.33.jar
BOOT-INF/lib/fastjson-1.2.83.jar
BOOT-INF/lib/netty-all-4.1.89.Final.jar
BOOT-INF/lib/logback-classic-1.4.5.jar
BOOT-INF/lib/log4j-to-slf4j-2.19.0.jar
BOOT-INF/lib/jul-to-slf4j-2.0.6.jar
BOOT-INF/lib/spring-jcl-6.0.6.jar
BOOT-INF/lib/jackson-datatype-jsr310-2.14.2.jar
BOOT-INF/lib/jackson-module-parameter-names-2.14.2.jar
BOOT-INF/lib/jackson-annotations-2.14.2.jar
BOOT-INF/lib/jackson-core-2.14.2.jar
BOOT-INF/lib/jackson-datatype-jdk8-2.14.2.jar
BOOT-INF/lib/jackson-databind-2.14.2.jar
BOOT-INF/lib/tomcat-embed-websocket-10.1.5.jar
BOOT-INF/lib/tomcat-embed-core-10.1.5.jar
BOOT-INF/lib/tomcat-embed-el-10.1.5.jar
BOOT-INF/lib/micrometer-observation-1.10.4.jar
BOOT-INF/lib/netty-transport-native-epoll-4.1.89.Final-linux-x86_64.jar
BOOT-INF/lib/netty-transport-native-epoll-4.1.89.Final-linux-aarch_64.jar
BOOT-INF/lib/netty-transport-native-kqueue-4.1.89.Final-osx-x86_64.jar
BOOT-INF/lib/netty-transport-native-kqueue-4.1.89.Final-osx-aarch_64.jar
BOOT-INF/lib/netty-transport-classes-epoll-4.1.89.Final.jar
BOOT-INF/lib/netty-transport-classes-kqueue-4.1.89.Final.jar
BOOT-INF/lib/netty-resolver-dns-native-macos-4.1.89.Final-osx-x86_64.jar
BOOT-INF/lib/netty-resolver-dns-native-macos-4.1.89.Final-osx-aarch_64.jar
BOOT-INF/lib/netty-resolver-dns-classes-macos-4.1.89.Final.jar
BOOT-INF/lib/netty-resolver-dns-4.1.89.Final.jar
BOOT-INF/lib/netty-handler-4.1.89.Final.jar
BOOT-INF/lib/netty-transport-native-unix-common-4.1.89.Final.jar
BOOT-INF/lib/netty-codec-dns-4.1.89.Final.jar
BOOT-INF/lib/netty-codec-4.1.89.Final.jar
BOOT-INF/lib/netty-transport-4.1.89.Final.jar
BOOT-INF/lib/netty-buffer-4.1.89.Final.jar
BOOT-INF/lib/netty-codec-haproxy-4.1.89.Final.jar
BOOT-INF/lib/netty-codec-http-4.1.89.Final.jar
BOOT-INF/lib/netty-codec-http2-4.1.89.Final.jar
BOOT-INF/lib/netty-codec-memcache-4.1.89.Final.jar
BOOT-INF/lib/netty-codec-mqtt-4.1.89.Final.jar
BOOT-INF/lib/netty-codec-redis-4.1.89.Final.jar
BOOT-INF/lib/netty-codec-smtp-4.1.89.Final.jar
BOOT-INF/lib/netty-codec-socks-4.1.89.Final.jar
BOOT-INF/lib/netty-codec-stomp-4.1.89.Final.jar
BOOT-INF/lib/netty-codec-xml-4.1.89.Final.jar
BOOT-INF/lib/netty-resolver-4.1.89.Final.jar
BOOT-INF/lib/netty-common-4.1.89.Final.jar
BOOT-INF/lib/netty-handler-proxy-4.1.89.Final.jar
BOOT-INF/lib/netty-handler-ssl-ocsp-4.1.89.Final.jar
BOOT-INF/lib/netty-transport-rxtx-4.1.89.Final.jar
BOOT-INF/lib/netty-transport-sctp-4.1.89.Final.jar
BOOT-INF/lib/netty-transport-udt-4.1.89.Final.jar
BOOT-INF/lib/logback-core-1.4.5.jar
BOOT-INF/lib/slf4j-api-2.0.6.jar
BOOT-INF/lib/log4j-api-2.19.0.jar
BOOT-INF/lib/micrometer-commons-1.10.4.jar
BOOT-INF/classes/static/
BOOT-INF/classes/templates/
BOOT-INF/lib/spring-boot-jarmode-layertools-3.0.4.jar
BOOT-INF/classpath.idx
BOOT-INF/layers.idx
接下來(lái),運(yùn)行看看
java -jar .\TinaSprout-0.0.1-SNAPSHOT.jar
輸入命令之后可以看到。項(xiàng)目已經(jīng)成功的被啟動(dòng)了。