当前位置: 首页 > 知识库问答 >
问题:

gradle-没有主清单属性

谢奕
2023-03-14

我正在用Gradle构建一个JAR文件。当我尝试运行它时,我得到了错误

RxJavaD中没有主清单属性emo.jar

我试图操纵清单属性,但我想我忘记向它添加依赖项或其他东西了。我到底做错了什么?

apply plugin: 'java'
apply plugin: 'application'

mainClassName = 'demo.MainDashboard'

dependencies {
    compile files ("H:/Processes/Development/libraries/hikari-cp/HikariCP-2.4.1.jar")
    compile files ("H:/Processes/Development/libraries/controls-fx/controlsfx.jar")
    compile files ("H:/Processes/Development/libraries/database_connections/sqlite-jdbc-3.8.6.jar")
    compile files ("H:/Processes/Development/libraries/guava/guava-18.0.jar")
    compile files ("H:/Processes/Development/libraries/rxjava/rxjava-1.0.12.jar")
    compile files ("H:/Processes/Development/libraries/rxjava-extras/rxjava-extras-0.5.15.jar")
    compile files ("H:/Processes/Development/libraries/rxjavafx/RxJavaFX-1.0.0-RC1-SNAPSHOT.jar")
    compile files ("H:/Processes/Development/libraries/rxjavaguava/rxjava-guava-1.0.3.jar")
    compile files ("H:/Processes/Development/libraries/rxjava-jdbc/rxjava-jdbc-0.6.3.jar")
    compile files ("H:/Processes/Development/libraries/slf4j/slf4j-api-1.7.12.jar")
    compile files ("H:/Processes/Development/libraries/tom-commons/tom-commons.jar")
}

sourceSets {
    main.java.srcDir "src/main/java"
    main.resources.srcDir "src/main/resources"
}

jar { 
    manifest {
    attributes(
        "Class-Path": configurations.compile.collect { it.getName() }.join(' '))
    }
    from configurations.compile.collect { entry -> zipTree(entry) }
}

共有3个答案

裘安阳
2023-03-14

FWIW-我使用以下jar任务将所有编译依赖项组装到jar文件中,并使用上述建议正确设置类路径

apply plugin: 'java-library'

jar {
  manifest {
    attributes(
      'Class-Path': configurations.compile.collect { it.getName() }.join(' '),
      'Main-Class': 'your.main.class.goes.here'
    )
  }

  // You can reference any part of the dependency configurations,
  // and you can have as many from statements as you need
  from configurations.compile  
  // I just copied them into the top of the jar, so it looks like the eclipse exported 
  // runnable jar, but you could designate a lib directory, and reference that in the 
  // classpath as "lib/$it.name" instead of it.getName()
  into ''   
}
丌官信厚
2023-03-14
匿名用户

要使jar文件可执行(以便java-jar命令工作),请在MANIFEST. MF中指定Main-Class属性。

在Gradle中,可以通过配置jar任务来实现。

  • 有关Groovy DSL,请参见以下答案([1]、[2])
tasks.withType<Jar> {
    manifest {
        attributes["Main-Class"] = "com.caco3.Main"
    }
}

或者为什么mainClassName没有在清单中指定属性?

属性来自应用程序插件。插件:

使开发过程中本地启动应用程序变得容易,并将应用程序打包为TAR和/或ZIP,包括特定于操作系统的启动脚本。

所以应用程序插件的目的不是生成可执行的jars

当设置main ClassName属性时,则:

  1. $/gradlew run将在属性中指定的类中启动main方法
  2. 使用distZip/distTar任务构建的zip/tar存档将包含一个脚本,该脚本将启动指定类的main方法

下面是设置主类的shell脚本行:

$ grep Main2 gradletest
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLETEST_OPTS -classpath "\"$CLASSPATH\"" com.caco3.gradletest.Main2 "$APP_ARGS"

贺光华
2023-03-14

尝试更改清单属性,如:

jar {
  manifest {
    attributes(
      'Class-Path': configurations.compile.collect { it.getName() }.join(' '),
      'Main-Class': 'hello.HelloWorld'
    )
  }
}

然后只需将'hello.helloWorld'更改为'

 类似资料:
  • 问题内容: 运行基于Gradle构建的JAR文件时遇到的错误让我有点发疯。错误显示为“ RxJavaDemo.jar中没有主清单属性”,我尝试操纵Manifest属性,但我想我忘记在其中添加依赖项或其他内容。我到底在做什么错? 问题答案: 尝试更改清单属性,例如: 然后只需更改为(您的Main类具有main方法)。在这种情况下,您可以在清单中创建一个指向此类的属性,然后运行一个jar。

  • 我得到以下错误,而Spring引导罐在CI环境 奇怪的是,它没有在我的本地奴隶或詹金斯奴隶中给出问题。一切都很好。 当我将jar上传到Nexus artifactory并将其下载到我的CI环境中时,它面临问题。 建筑罐子使用 我的gradle.build档案 没有白费的文章1。没有主清单属性2。http://www.vogella.com/tutorials/Gradle/article.html

  • 我正在尝试运行由maven shade插件创建的jar。我正在以以下方式配置主类: 编辑:我使用jar tf app.jar检查了jar的内容,看到了一个manifest.mf文件。但它没有main类的条目。我如何确保jar中的清单文件中有这个条目,以便在shade插件配置中添加它?

  • 我知道jar文件应该有一个manifest.mf main-class:属性,以便有一个入口点并使jar文件可以运行。现在,我有了一个jar文件,我已经在下面构建了它。这些类都是卷饼包的一部分。我的MANIFEST.MF文件如下所示:

  • 我知道有很多像这样的题目,但我没有找到答案我的问题。我已经在IntelliJ中创建了JAR文件,并在项目结构中构建了工件。在Java文件夹中,我有一个包META-INF和manifest.mf: 那么我是否应该将它手动添加到IntelliJ中的JAR中呢? Edit:CrazyCoder给出了一个很好的说明,说明META-INF应该在resourse文件夹中,但是我的IntelliJ默认设置一开始

  • 我已经看了几个不同的线程,没有找到解决方案。我做了一个项目,使用java和Gradle从google sheets检索数据。我已经创建了一个工件,并通过IntelliJ构建了jar文件。当我尝试使用“java-jar filename.jar”通过终端运行jar时,我得到“no main manifest attribute,in filename.jar” My Manifest.mf位于mai