首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用gradle - Jar构建Jar没有sql依赖

使用gradle - Jar构建Jar没有sql依赖
EN

Stack Overflow用户
提问于 2022-01-27 10:28:07
回答 2查看 231关注 0票数 1

我正在尝试建立一个非常简单的程序。我只有一个依赖项,msql。

每一个建筑都是成功的。但是,如果我试图运行jar,则抛出这个异常列表:

错误:无法找到或加载主类元数据数据库-0.5-msSQL.jar引发的: java.lang.ClassNotFoundException:元数据数据库-0.5-msSQL.jar

如果我查看jar (例如,7zip ),就会看到所有已编译的类。

MANIFEST.MF的内容如下:

代码语言:javascript
复制
Manifest-Version: 1.0
Main-Class: metaDataDB.Main

也许这有帮助:Intellij的项目结构

这是我的完整身材:

代码语言:javascript
复制
plugins {
    id 'java'
}

jar{
    manifest {
        attributes 'Main-Class': 'metaDataDB.Main'
    }
}

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'
    // / https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc
    // https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc
    implementation group: 'com.microsoft.sqlserver', name: 'mssql-jdbc', version: '9.5.0.jre17-preview'
}

test {
    useJUnitPlatform()
}

我搞错什么了吗?这是Intellij错误吗?我真的很困惑。我觉得应该管用..。

编辑:--我犯了一个错误--我做错了java命令。就像我以前那样:

代码语言:javascript
复制
java metaDataDB-0.5-msSQL.jar -login:login.txt

正确的方法是:

代码语言:javascript
复制
java -jar metaDataDB-0.5-msSQL.jar -login:login.txt

但要知道我还有个问题。我的jdbc驱动程序不包括在Jarfile中

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-28 16:31:02

第一个问题是,我错误地把Jar文件泄露出去了。

我做到了

java metaDataDB-0.5-msSQL.jar -login:login.txt

正确的方法是:

java -jar metaDataDB-0.5-msSQL.jar -login:login.txt

在那之后,我意识到我没有将所需的依赖包含到我的Jar中。我已经学会了什么是脂肪罐文件。

因此,我需要将其添加到gradle jar任务中:

代码语言:javascript
复制
 from{
        configurations.runtimeClasspath.collect {it.isDirectory() ? it: zipTree(it)}
    }

为了参考我的整个build.gradle文件:

代码语言:javascript
复制
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驱动程序,出现了一个新的问题。

代码语言:javascript
复制
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://learn.microsoft.com/de-de/dotnet/api/system.security.securityexception?view=net-6.0

我试过在管理员模式下运行,但也失败了.

但我想这是个新问题,不需要对gradle做任何事情。

我想“使用gradle - Jar构建一个Jar没有sql依赖”的答案已经得到了回答。

我将为microsoft驱动程序创建一个新的问题,并在这里链接它。

(我希望我一切都做得对)

票数 0
EN

Stack Overflow用户

发布于 2022-01-27 10:43:37

这个问题存在于msSQL.jar中,我想还有一些缺少的类,您可以转到https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc并为您的JRE实现正确的jar,或者使用不同的版本进行实验。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70876979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档