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

没有主清单属性,在application.jar

姜晨
2023-03-14

我得到以下错误,而Spring引导罐在CI环境

java -jar application.jar

no main manifest attribute, in application.jar

奇怪的是,它没有在我的本地奴隶或詹金斯奴隶中给出问题。一切都很好。

当我将jar上传到Nexus artifactory并将其下载到我的CI环境中时,它面临问题。

建筑罐子使用

gradle clean build -x test

我的gradle.build档案

buildscript {
    repositories {
        maven {
            url "https://plugins.gradle.org/m2/"
        }
        jcenter()
        mavenLocal()
        mavenCentral()

    }
    dependencies {
        classpath 'org.akhikhl.gretty:gretty:1.2.4'
        classpath 'org.ajoberstar:gradle-jacoco:0.1.0'
        classpath 'org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:1.2'
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.3.6.RELEASE")
    }
}

repositories {
    mavenCentral()
    mavenLocal()
    maven {
        credentials {
            username "hello"
            password "world"
        }
        url "Nexus URL"
    }
}

apply plugin: 'maven-publish'
apply plugin: 'java'
apply plugin: 'maven'
apply plugin: 'spring-boot'
apply plugin: "org.sonarqube"
apply plugin: 'jacoco'

group = 'com.company.pod'

/* Determining version from jenkins pipeline, otherwise is set to 1.0.0-SNAPSHOT */
version = new ProjectVersion(1, 0, System.env.SOURCE_BUILD_NUMBER, System.env.RELEASE_TYPE)

println(version)


class ProjectVersion {
    Integer major
    Integer minor
    String build
    String releaseType

    ProjectVersion(Integer major, Integer minor, String build, String releaseType) {

        this.major = major
        this.minor = minor
        this.build = build
        this.releaseType = releaseType
    }

    @Override
    String toString() {
        String fullVersion = "$major.$minor"

        if(build) {
            fullVersion += ".$build"
        }
        else{
            fullVersion += ".0"
        }

        if(releaseType) {
            fullVersion += "-RELEASE"
        }
        else{
            fullVersion += "-SNAPSHOT"
        }

        fullVersion
    }
}

/*Sonarqube linting of your repository.*/
sonarqube {
    properties {
        property "sonar.language", "java"
                }
        }


/* Please don't comment out the part below
To run the same on your laptops/prod boxes/CUAT boxes, just edit the gradle.properties file.
(It will be present in the home directory of the user you are using to run gradle with.`sudo` means root user and likewise)
Enter the following lines(and yes, it will run without values, thank you gradle!)

nexusUrl=
nexusRelease=
nexusSnapshot=
nexusUsername=
nexusPassword=

*/

uploadArchives {
    repositories {
        mavenDeployer {
                repository(url: nexusUrl+"/"+nexusRelease+"/") {
                        authentication(userName: nexusUsername, password: nexusPassword)
                        }
                snapshotRepository(url: nexusUrl+"/"+nexusSnapshot+"/"){
                        authentication(userName: nexusUsername, password: nexusPassword)
                        uniqueVersion = false
                        }
                }
        }
}






publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java
        }
    }
}

publishing {
    publications {
        maven(MavenPublication) {
            groupId 'com.company.something'/*This is different from group variable before*/
            artifactId 'something'
            version '2.0.0'
            from components.java
        }
    }
}

/*
publishing {
    repositories {
        maven {
            url "~/.m2/repository/"
        }
    }
}
*/

task wrapper(type: Wrapper) {
    gradleVersion = '2.9'
    distributionUrl = "https://services.gradle.org/distributions/gradle-$GradleVersion-all.zip"
}

dependencies {
    compile('org.projectlombok:lombok:1.16.6')
    compile("com.company.commons:company-app:0.0.1-RELEASE")
    compile group: 'com.google.guava', name: 'guava', version: '19.0'
    compile("com.squareup.retrofit2:retrofit:2.0.1")
    compile("com.squareup.retrofit2:converter-jackson:2.0.1")

    compile("org.springframework.boot:spring-boot-starter-data-jpa")
    compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.1.7'
    compile("com.getsentry.raven:raven-logback:7.2.2")
    compile("org.springframework.boot:spring-boot-starter-actuator")

    testCompile("org.springframework.boot:spring-boot-starter-test")
    testCompile("com.h2database:h2")
    testCompile("junit:junit")
//  testCompile("org.springframework.boot:spring-boot-starter-test")
//  testCompile group: 'org.hibernate', name: 'hibernate-validator', version: '4.2.0.Final'
}

没有白费的文章1。没有主清单属性2。http://www.vogella.com/tutorials/Gradle/article.html#specifying-the-java-version-in-your-build-file3。不能执行jar-文件:“没有主清单属性”

共有3个答案

张伯寅
2023-03-14

它与

gradle upload -x jar
谈阎宝
2023-03-14

在构建了jar之后,我必须运行gradle bootRepackage,然后git一个我可以执行的jar!

邵星河
2023-03-14

默认打包的jar文件不包含MANIFEST文件。我不知道如何在Gradle中配置,但在Maven中添加插件时:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <mainClass>vn.dung.Application</mainClass>
                    </manifest>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
                <appendAssemblyId>false</appendAssemblyId>
            </configuration>
        </plugin>

这对我很有效。你可以将Maven插件配置更改为Gradle。

 类似资料:
  • 我正在用Gradle构建一个JAR文件。当我尝试运行它时,我得到了错误 RxJavaD中没有主清单属性emo.jar 我试图操纵清单属性,但我想我忘记向它添加依赖项或其他东西了。我到底做错了什么?

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

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

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

  • 我最近才开始在Java中玩弄Maven。测试我的项目的时间到了,它在NetBeans窗口中运行良好,运行了app.java(com.mycompany.app)中的主类,但是当我试图从命令行运行它时,我得到了一个错误: 有事吗?

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