這是how to execute a built fat JAR as a gradle task?的後續問題 我沒有足夠的觀點來問我的問題作爲評論。所以我必須再問一次。這個問題已多次被其他格式和場景詢問過,但這些迴應都沒有幫助我。如何用gradle創建的fatJar中的主要方法執行一個類
我的問題:
場景1:創建使用的gradle fatJar依賴性的單罐
方案2:使用行家組件創建具有相關性的單一罐
執行
java -cp sample.jar com.example.ClassA
這兩個進程中生成的jar文件。
問題:從過程1 罐子給我
錯誤:無法找到或從過程2正確執行加載主類com.example.ClassA
罐子。
我已經提取了兩個jar文件,並且它們都具有相同的文件夾結構和相同的文件 - 表示編譯後的類文件存在於兩個jar文件中。
我沒有在任何進程中指定任何清單條目,因爲我有多個主類,而且我沒有嘗試生成可執行的jar文件。
我的build.gradle文件看起來像如下:
apply plugin: 'java'
apply plugin: 'maven'
sourceCompatibility = 1.8
targetCompatibility = 1.8
repositories {
mavenLocal()
}
sourceSets {
main{
java{
srcDirs 'src/main/java'
}
}
}
processResources {
from 'src/main/resources'
}
task compile (type: JavaCompile) {
source = sourceSets.main.java.srcDirs
include '**/*.java'
classpath = sourceSets.main.compileClasspath
destinationDir = sourceSets.main.output.classesDir
}
compile.options.compilerArgs = ["-sourcepath", "$projectDir/src/main/java"]
dependencies {
.
.
.
}
task fatJar(type:Jar) {
baseName = 'xxxxxxx'
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
with jar
}
defaultTasks 'clean', 'compile', 'fatJar'
編輯 - 1:
我試圖相對路徑罐子,絕對路徑罐子,甚至瀏覽到包含文件夾罐子裏。沒有任何運氣。
我試過使用'/'而不是'。'。在包名中。那裏也沒有運氣。
我已經嘗試使用Java虛擬機參數提供足夠大的堆空間。納達。
試圖在PowerShell上執行。得到以下錯誤:
+ CategoryInfo : NotSpecified: (Error: Could not lo...ClassA:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
我想直接看到內容使用jar -tvf path_to_jar \ sample.jar。有趣的是,jar命令沒有執行並且抱怨在類路徑中沒有找到命令。我不得不瀏覽到java安裝目錄並執行命令並顯示文件內容。
我在這裏沒有想法和選擇。 任何指針?
@ 2194470我看到情侶您所做的與我的場景之間的差異。 1.我在Windows上測試,你可能在Mac上做過。我認爲這與這個問題沒有任何關係。 2.我使用簡單的「gradle」命令執行fatJar,並使用「graddew」包裝器命令。我會試試這個,讓你知道。順便說一句,在執行fatJar時使用gradle和gradlew有什麼區別嗎? –
我幾乎可以肯定你的問題是由於你在'java -cp ...'命令中傳遞的JAR文件的錯誤路徑導致的。嘗試首先將絕對路徑傳遞給此文件。由於JVM引發此錯誤,因此Windows/Linux差異不應該成爲問題。使用'gradlew'與本地安裝的'gradle'相比沒有區別 - 我使用它主要是因爲它更容易與其他版本的Gradle分享。 –
用額外的評論編輯這個問題,你能再次檢查它嗎? –