敢说敢作敢为, 无怨无恨无悔。这篇文章主要讲述application.jar中没有主要清单属性相关的知识,希望能为你提供帮助。
我在CI环境中的spring boot jar时遇到以下错误
java -jar application.jarno main manifest attribute, in application.jar
奇怪的是,它没有在我的本地或jenkins奴隶问题。它开始没事。
【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 releaseTypeProjectVersion(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. Gradle- no main manifest attribute 2. http://www.vogella.com/tutorials/Gradle/article.html#specifying-the-java-version-in-your-build-file 3. Can't execute jar- file: "no main manifest attribute"
答案默认打包的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。
另一答案我必须在构建jar后运行
gradle bootRepackage
并git我可以执行的jar!另一答案在build.gradle中,我注意到启动重新打包已禁用,因此我启用了它:
bootRepackage {
enabled = true
}
另一答案嗨我有完全相同的问题,我找到了答案:Spring Boot Upload BootRepackage Executable Jar
我使用了解决方案2
publish {
dependsOn assemble
}
另一答案它合作
gradle upload -x jar
推荐阅读
- 迷你教程–字体组合指南
- React Native(找不到com.android.tools.build:gradle:2.2.3)
- Android(如何让gradle让特定的依赖关系脱机而其他人在线())
- 从java模块引用android库
- 无法解析项目(Android库和Java库模块依赖项)
- 我安装了Android Studio,但我无法通过命令行访问gradle
- 使用Android Studio 3.1和build构建项目时出错(gradle 3.1.0)
- Gradle android无法找到符号Context
- Android Studio 3.1 gradle build抛出java.util.zip.ZipException