【问题标题】:After adding SQLServer dependency to Gradle, jar can't find Main classGradle添加SQLServer依赖后,jar找不到Main类
【发布时间】:2025-11-28 06:15:01
【问题描述】:

我有一个带有一些第三方依赖项的 Gradle 项目。

在我添加 SQLServer 依赖项之前,我的 jar 一直运行良好。

这是 build.gradle 的快照:

group 'MyApp'
version '1.0-SNAPSHOT'

apply plugin: 'java'
apply plugin: 'idea'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    compile 'com.amazonaws:aws-java-sdk:1.11.60'
    compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.6'
    compile files('mylibraries/ojdbc7.jar')
    compile files('mylibraries/postgresql-42.1.4.jar')
    compile files('mylibraries/mssql-jdbc-6.2.1.jre8.jar')
}

jar {
    from {
        configurations.compile.collect {
            it.isDirectory() ? it : zipTree(it)
        }

    }
    manifest {
        attributes 'Main-Class': 'MainLauncher'
    }
}

compile files('mylibraries/mssql-jdbc-6.2.1.jre8.jar') 添加到依赖项后,一切都崩溃了。我得到的错误:

错误:无法找到或加载主类 MainLauncher

什么可能是潜在的问题?谢谢!

【问题讨论】:

  • 构建 jar - 提取它 (jar -xvf <some.jar>) 并验证 META-INF/MANIFEST.MF 文件 - 如果一切正常。手动创建胖罐子可能会搞砸一些事情。还有一个用于 gradle 的影子插件——它经过了很好的测试,可以正确构建 fat jar。为什么MainLauncher 没有包名?
  • 感谢您的回复,欧泊。有趣的是,只有一个特定的库会导致整个执行崩溃。除此之外一切正常。我已经通过使用另一个开源解决方案解决了一个问题。没有包名,因为 MainLauncher 文件位于“java”文件夹的根目录中。

标签: java sql-server intellij-idea gradle gradlew


【解决方案1】:

今天我遇到了完全相同的问题,我访问了这个页面以获得解决方案

我正在运行具有以下依赖项的 jar

group: 'com.microsoft.sqlserver', name: 'mssql-jdbc', version: '6.2.2.jre8'

我也遇到了同样的问题,

错误:无法找到或加载主类

后来我用旧版本更改了依赖关系,并且在此更改后运行良好

组:“com.microsoft.sqlserver”,名称:“mssql-jdbc”,版本: '6.2.1.jre7'

【讨论】:

    【解决方案2】:

    前段时间我也遇到过同样的问题。我刚刚导入了项目并想做一个 gradle clean build。我遇到了完全相同的错误。

    我可以通过确保我至少进行一次迁移来解决这个问题。这可能听起来很傻,但只需尝试为您的数据库创建 1 个迁移。

    至少它解决了我的问题,我当然希望它也能解决你的问题!

    【讨论】: