英文:
Got error when running application in Railway: no main manifest attribute, in build/libs/12WeekMethod-plain.jar
问题
我在尝试在Railway部署我的应用程序时遇到了问题。在本地,应用程序运行正常,但在Railway的部署过程中,我不断遇到以下错误消息:
no main manifest attribute, in build/libs/12WeekMethod-plain.jar
这是我的build.gradle文件内容:
plugins {
id 'java'
id 'org.springframework.boot' version '2.7.13'
id 'io.spring.dependency-management' version '1.0.15.RELEASE'
}
group = 'com.mundim'
version = ''
java {
sourceCompatibility = '17'
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-maven-plugin:3.1.1'
implementation 'org.testng:testng:7.1.0'
runtimeOnly 'org.postgresql:postgresql'
// Lombok
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
// Swagger
implementation 'org.springdoc:springdoc-openapi-ui:1.7.0'
// Security
implementation 'org.springframework.boot:spring-boot-starter-security:3.1.1'
// Thymeleaf
implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5:3.1.1.RELEASE'
// JJWT
implementation 'com.auth0:java-jwt:4.2.1'
// Mail sender
implementation 'org.springframework.boot:spring-boot-starter-mail'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
// Thymeleaf
implementation 'org.thymeleaf:thymeleaf:3.1.1.RELEASE'
// Test
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'com.h2database:h2:2.2.220'
testImplementation 'junit:junit:4.13.2'
}
tasks.named('test') {
useJUnitPlatform()
}
希望这有助于解决你的问题。如果需要进一步的帮助,请随时提问。
英文:
`I am encountering an issue while attempting to deploy my application in Railway. Locally, the application runs without any problems. However, during the deployment process in Railway, I keep encountering the following error message:
no main manifest attribute, in build/libs/12WeekMethod-plain.jar
This is my build.gradle:
plugins {
id 'java'
id 'org.springframework.boot' version '2.7.13'
id 'io.spring.dependency-management' version '1.0.15.RELEASE'
}
group = 'com.mundim'
version = ''
java {
sourceCompatibility = '17'
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-maven-plugin:3.1.1'
implementation 'org.testng:testng:7.1.0'
runtimeOnly 'org.postgresql:postgresql'
// Lombok
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
// Swagger
implementation 'org.springdoc:springdoc-openapi-ui:1.7.0'
// Security
implementation 'org.springframework.boot:spring-boot-starter-security:3.1.1'
// Thymeleaf
implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5:3.1.1.RELEASE'
// JJWT
implementation 'com.auth0:java-jwt:4.2.1'
// Mail sender
implementation 'org.springframework.boot:spring-boot-starter-mail'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
// Thymeleaf
implementation 'org.thymeleaf:thymeleaf:3.1.1.RELEASE'
// Test
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'com.h2database:h2:2.2.220'
testImplementation 'junit:junit:4.13.2'
}
tasks.named('test') {
useJUnitPlatform()
}
答案1
得分: 0
问题在于您的依赖关系混乱。您包含了不兼容的版本,并混合使用来自不同版本框架的模块。在这里,您混合使用了Spring Boot 2.7.x和3.1.x,这永远不会起作用,也不是应该做的事情。
plugins {
id 'java'
id 'org.springframework.boot' version '2.7.13'
id 'io.spring.dependency-management' version '1.0.15.RELEASE'
}
group = 'com.mundim'
version = ''
java {
sourceCompatibility = '17'
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-mail'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5'
runtimeOnly 'org.postgresql:postgresql'
// Lombok
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
// Swagger
implementation 'org.springdoc:springdoc-openapi-ui:1.7.0'
// JJWT
implementation 'com.auth0:java-jwt:4.2.1'
// Mail sender
testImplementation 'org.springframework.boot:spring-boot-starter-test'
// Test
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'com.h2database:h2:2.2.220'
}
tasks.named('test') {
useJUnitPlatform()
}
- 删除了
testng
和junit
的依赖项,因为您似乎正在使用JUnit Jupiter(根据测试设置推断)。 - 从
spring-boot-starter-*
依赖项中删除了版本,以便版本对齐。 - 从
org.thymeleaf.extras:thymeleaf-extras-springsecurity5
中删除了版本,以便使用与Spring Boot管理的兼容版本。 - 用
spring-boot-starter-thymeleaf
替换了Thymeleaf,以获取正确的版本和管理。
有了这些修改,您应该拥有正确和兼容的版本,并且您的应用程序将能够启动。
最后,您应该使用./gradlew build
来构建一个JAR文件,而不是使用plain
,因为它不包含依赖项。您需要部署由Spring Boot创建的fatjar。
英文:
The problem is your dependencies are a mess. You are including incompatible versions and are mixing modules from different versions of a framework. Here you are mixing Spring Boot 2.7.x and 3.1.x that is never going to work nor is something you should never do.
plugins {
id 'java'
id 'org.springframework.boot' version '2.7.13'
id 'io.spring.dependency-management' version '1.0.15.RELEASE'
}
group = 'com.mundim'
version = ''
java {
sourceCompatibility = '17'
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-mail'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5'
runtimeOnly 'org.postgresql:postgresql'
// Lombok
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
// Swagger
implementation 'org.springdoc:springdoc-openapi-ui:1.7.0'
// JJWT
implementation 'com.auth0:java-jwt:4.2.1'
// Mail sender
testImplementation 'org.springframework.boot:spring-boot-starter-test'
// Test
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'com.h2database:h2:2.2.220'
}
tasks.named('test') {
useJUnitPlatform()
}
- Removed
testng
andjunit
dependency as you seem to be using JUnit Jupiter (judging from the test setup). - Removed version from the
spring-boot-starter-*
dependencies so the versions align - Removed version from
org.thymeleaf.extras:thymeleaf-extras-springsecurity5
so it uses a compatible version (managed by Spring Boot) - Replaced Thymeleaf with
spring-boot-starter-thymeleaf
to get the proper version and management.
With this you should have proper and compatible versions and your application will start.
Finally you should use ./gradlew build
to build a jar and not use the plain
one as that doesn't include the dpendencies. You need to deploy the fatjar created by Spring Boot.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论