代码之家  ›  专栏  ›  技术社区  ›  ShadowDragon

渐变多项目配置:无法找到或加载主类

  •  1
  • ShadowDragon  · 技术社区  · 6 年前

    问题

    我正在使用Gradle构建一个项目,但是每当我想通过 java -jar <the jar> 它失败并出现以下错误: Error: Could not find or load main class projectz.ProjectZ .

    我已经发现我需要在Gradle项目中添加以下行:

    mainClassName = 'projectz.ProjectZ'
    
    jar {
        manifest {
            attributes('Main-Class': project.mainClassName)
        }
    }
    

    然而,这并不能解决问题。我不能执行我的罐子。用IDE(eclipse)构建同一个jar会给我一个工作jar。复制粘贴我的 META-INF Gradle生成的JAR文件夹也不能解决这个问题。

    对于我的设置,我使用以下插件:

    plugins {
        id 'java'
        id 'application'
        id 'eclipse'
        id 'idea'
    }
    

    我的项目还依赖于通过Gradle dependencies导入的另一个项目(因为这是一个多项目设置): compile project (':Lib') 这个依赖项也不会添加到我的jar文件中,但是当我运行 installDist 有了Gradle,它就被添加了,我可以启动JAR(只考虑Gradle放在文件夹中的一些批处理文件),java突然发现了我的主类(它不是依赖项的一部分,而是主项目的一部分)。试着在正常情况下运行我的jar文件 java -jar <jar file> 这条路还是行不通。

    到目前为止我试过的

    我搜索了java给我的错误,并将缺少的行添加到构建.gradle我觉得这不能解决我的问题。我还搜索了Gradle文档,想知道我是否遗漏了一些东西,但没有找到遗漏的东西。

    我的设置

    • 全新的Java8安装(我的项目使用)
    • 新建Gradle项目和设置
    • 使用Gradle 4.10.2的新Gradle安装
    1 回复  |  直到 5 年前
        1
  •  1
  •   M.Ricciuti    6 年前

    这个 jar 标准 罐子,不是瓶子 肥罐 (见 Fat jar description java -jar <the-jar> . 您的依赖项没有包含在这个jar中(至少是来自依赖项目的代码) :Lib ,当然还有其他外部依赖项)

    ,或使用 application gradle插件。

    用于建筑 您有不同的解决方案,例如:

    mainClassName = "org.mycompany.gradle.MainApp"
    jar {
        manifest {
            attributes('Main-Class': project.mainClassName)
        }
        // HERE : include dependencies into the jar 
        from {
            configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
        }
    }
    

    其他解决方案可以在那里找到: https://www.baeldung.com/gradle-fat-jar