【发布时间】:2018-01-10 07:19:12
【问题描述】:
这是how to execute a built fat JAR as a gradle task? 的后续问题 我没有足够的分数来提出我的问题作为评论。所以我不得不再问一次。这个问题已多次以其他形式和场景被问过,但这些回答都没有帮助我。
我的问题:
场景 1:使用 gradle fatJar 创建具有依赖关系的单个 jar
场景 2:使用 maven 程序集创建具有依赖关系的单个 jar
执行
java -cp sample.jar com.example.ClassA
关于两个进程中生成的 jar 文件。
问题: Process 1 中的 jar 给了我
错误:无法找到或加载主类 com.example.ClassA
进程 2 中的 jar 正确执行。
我已经提取了两个 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:
我尝试过 jar 的相对路径、jar 的绝对路径,甚至浏览到包含 jar 的文件夹。一点运气都没有。
我尝试使用 '/' 而不是 '.'在包名中。那里也没有运气。
我尝试过使用 java VM 参数来提供足够大的堆空间。纳达。
尝试在 powershell 上执行。出现以下错误:
+ CategoryInfo : NotSpecified: (Error: Could not lo...ClassA:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
我想直接看内容所以使用了 jar -tvf path_to_jar\sample.jar 。有趣的是 jar 命令没有执行并抱怨在类路径中找不到命令。我必须浏览到 java 安装目录并执行命令,它会显示文件内容。
我的想法和选项都用完了。 有什么指点吗?
【问题讨论】: