我有一个包含Gradle的多模块java/Kotlin应用。我想使用.jar
在终端中启动我的应用:例如java -jar mayApp.jar
**如何在多模块应用程序中正确构建.jar
?**当我尝试进入终端时,IDEA生成的.jar
未运行,原因是错误:
no main manifest attribute, in /Users/me/IdeaProjects/MyProject/out/artifacts/MyProject_jar/MyProject.jar
项目结构:
- :ApplicationName
- :bot-app
- src/main/java/main
Main.java // psvm
- src/main/resources
- META-INF
MANIFEST.MF
build.gradle // module's build
- :data
- :utils
build.gradle // application (root) build
因此,在我的多模块项目中,主类位于:bot-app
模块中,每个模块都有自己的build.gradle
,在根项目中,我有应用程序的build.gradle
;
模块构建.gradle
buildscript {
repositories {
...
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.0"
}
}
apply plugin: "org.jetbrains.kotlin.jvm"
apply plugin: 'kotlin-kapt'
group 'org.my_project'
version '2.4.0'
repositories {
mavenCentral()
maven { url 'https://jitpack.io' }
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib"
}
这是我的根构建。gradle
buildscript {
repositories {
...
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.0"
}
}
apply plugin: 'java'
tasks.withType(Jar) {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
manifest {
attributes["Main-Class"] = "main.Main"
}
}
如你所见,我加了
tasks.withType(Jar) {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
manifest {
attributes["Main-Class"] = "main.Main"
}
}
但是它对我不起作用。用一个模块就可以了,但是在重构为多模块之后,就不行了。
如何在多模块应用程序中构建.jar?
----统一产品开发商:
如果我删除了根项目中的.gradle
文件夹,然后尝试通过IDEA运行应用程序,它工作得很好。但是当我通过IDEA构建工件时,jar被创建,但不工作,并出现错误:no main manifest attribute
IDEA中的每个下一个构建都失败,错误为:'执行任务':bot-app:jar '失败。
META-INF/bot-app.Kotlin_module项重复,但未设置重复处理策略。“
如果我再次删除.gradle
,内置IDEA工作得很好。
1条答案
按热度按时间qvtsj1bj1#
需要删除:
这个代码是额外的给我。
然后在项目的根目录下创建
MANIFEST.MF
。注:您必须通过
file->project structure->artifact->+
创建它,并且必须在Directory for META-INF/MANIFEST.MF:
字段中设置根文件夹位置(不是模块文件夹,而是根)删除
.gradle
,清理并构建工件。