1. 程式人生 > >Spring實戰——如何執行第一章的程式碼(如何生成一個可執行的jar包)

Spring實戰——如何執行第一章的程式碼(如何生成一個可執行的jar包)

手動建立一個目錄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檔案(build/libs/knight-0.0.1-SNAPSHOT.jar)。
嘗試執行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