Spring實戰——如何執行第一章的程式碼(如何生成一個可執行的jar包)
阿新 • • 發佈:2018-11-02
手動建立一個目錄kni,進入kni建立一個build.gradle檔案,內容如下:
apply plugin: 'java'
jar {
baseName = 'knight'
version = '0.0.1-SNAPSHOT'
}
repositories {
mavenCentral()
}
dependencies {
compile("org.springframework:spring-context:4.3.7.RELEASE")
}
然後從第一章取來相應的程式碼,最終組成這樣的目錄結構:
在終端執行命令gradle build
嘗試執行jar檔案:
cd build/lib/
java -cp knight-0.0.1-SNAPSHOT.jar sia.knights.KnightMain
輸出Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/context/support/ClassPathXmlApplicationContext
。
解決方法一
在build.gradle檔案中新增內容:
task copyToLib(type : Copy) {
into "$buildDir/libs"
from configurations.runtime
}
build.dependsOn(copyToLib)
定義了一個copyToLib
的Task,該Task的作用就是將依賴的jar包全部copy到build/libs下,然後指定為build
的依賴。
最後回到專案根目錄執行gradle build
,再次進入build/libs,執行java -cp * sia.knights.KnightMain
即可。
解決方法二
在build.gradle檔案中新增內容:
apply plugin: 'application'
mainClassName = System.getProperty("mainClass")
然後回到專案根目錄,這樣執行:
gradle run -DmainClass=sia.knights.KnightMain
解決方法三
在build.gradle檔案中新增內容:
task run(type: JavaExec, dependsOn: classes) {
main = 'sia.knights.KnightMain'
classpath sourceSets.main.output.classesDir
classpath sourceSets.main.output.resourcesDir
classpath configurations.runtime
}
然後回到專案根目錄,這樣執行:
gradle run
解決方法四
在build.gradle頭部新增外掛
plugins {
id "us.kirchmeier.capsule" version "1.0.2"
}
然後新增一個打包的task
task fatCapsule(type: FatCapsule) {
applicationClass 'sia.knights.KnightMain'
}
然後回到專案根目錄,這樣執行,即可生成一個可執行的jar包:
gradle fatCapsule