第一个问题是,
我以错误的方式执行了 Jar 文件。
我做到了
java metaDataDB-0.5-msSQL.jar -login:login.txt
正确的做法:
java -jar metaDataDB-0.5-msSQL.jar -login:login.txt
在那之后,我意识到我没有将所需的依赖项包含到我的 Jar 中。
我已经了解了 Fat Jar 文件是什么。
所以我需要将此添加到我的 gradle jar 任务中:
from{
configurations.runtimeClasspath.collect {it.isDirectory() ? it: zipTree(it)}
}
参考我的整个 build.gradle 文件:
plugins {
id 'java'
}
jar{
manifest {
attributes ('Main-Class': 'metaDataDB.Main')
}
from{
configurations.runtimeClasspath.collect {it.isDirectory() ? it: zipTree(it)}
}
}
repositories {
mavenCentral()
}
group 'com.dvb'
//version '1.0-SNAPSHOT'
version '0.5-msSQL'
sourceCompatibility = 17
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2'
// https://mvnrepository.com/artifact/org.postgresql/postgresql
// implementation group: 'org.postgresql', name: 'postgresql', version: '42.3.1'
implementation 'com.microsoft.sqlserver:mssql-jdbc:10.1.0.jre17-preview'
// / https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc
// https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc
//implementation 'com.microsoft.sqlserver:mssql-jdbc:9.2.1.jre15'
}
test {
useJUnitPlatform()
}
这适用于 postgressql 驱动程序。
对于 Microsoft SQL 驱动程序,出现了一个新问题。
java -jar metaDataDB-0.5-msSQL.jar -login:ms.txt
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
at java.base/sun.security.util.SignatureFileVerifier.processImpl(SignatureFileVerifier.java:340)
at java.base/sun.security.util.SignatureFileVerifier.process(SignatureFileVerifier.java:282)
at java.base/java.util.jar.JarVerifier.processEntry(JarVerifier.java:277)
at java.base/java.util.jar.JarVerifier.update(JarVerifier.java:234)
at java.base/java.util.jar.JarFile.initializeVerifier(JarFile.java:762)
at java.base/java.util.jar.JarFile.ensureInitialization(JarFile.java:1033)
at java.base/java.util.jar.JavaUtilJarAccessImpl.ensureInitialization(JavaUtilJarAccessImpl.java:72)
at java.base/jdk.internal.loader.URLClassPath$JarLoader$2.getManifest(URLClassPath.java:883)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:848)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:760)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:467)
at java.base/sun.launcher.LauncherHelper.loadMainClass(LauncherHelper.java:780)
at java.base/sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:675)
这里是异常的链接:
https://docs.microsoft.com/de-de/dotnet/api/system.security.securityexception?view=net-6.0
我试过让它在管理员模式下运行,但也失败了......
但我猜这是一个新问题,与 gradle 没有任何关系。
我猜“使用 gradle 构建 Jar - Jar 没有 sql 依赖”的答案已经得到解答。
我将为 microsoft sql 驱动程序创建一个新问题并将其链接到此处。
(我希望我做的一切都是正确的)