Gradle - 기본 매니페스트 속성 없음
그래들하고 JAR 파일을 만들고 있어실행하려고 하면 다음 오류가 발생합니다.
메인 매니페스트 속성 없음, RxJavaDemo.jar
나는 그 조작을 시도했다.manifest
재산에 의존관계나 뭔가를 추가하는 걸 잊어버린 것 같아요내가 정확히 뭘 잘못하고 있는 거지?
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) }
}
매니페스트 속성을 다음과 같이 변경해 보십시오.
jar {
manifest {
attributes(
'Class-Path': configurations.compile.collect { it.getName() }.join(' '),
'Main-Class': 'hello.HelloWorld'
)
}
}
그리고 그냥 바뀌면 돼'hello.helloWorld'
로.'<your packagename>.<the name of your Main class>'
(Main 클래스에 기본 메서드가 있습니다).이 경우 매니페스트에서 이 클래스를 가리키는 속성을 만들면 항아리가 실행됩니다.
를 작성하려면jar
파일 실행 가능 파일(그래서java -jar
명령어 works)를 지정한다.Main-Class
에 귀속시키다.MANIFEST.MF
.
Gradle 에서는, 다음과 같이 설정할 수 있습니다.jar
작업.
tasks.withType<Jar> {
manifest {
attributes["Main-Class"] = "com.caco3.Main"
}
}
왜죠mainClassName
예상대로 동작하지 않는가?
아니면 왜?mainClassName
매니페스트에서 속성을 지정하지 않았습니까?
그mainClassName
속성은 플러그인에서 가져옵니다.플러그인:
를 사용하면 개발 중에 애플리케이션을 로컬로 쉽게 시작할 수 있으며 운영체제 고유의 시작 스크립트를 포함하여 애플리케이션을 TAR 및/또는 ZIP으로 패키징할 수 있습니다.
그래서...application
플러그인은 실행 파일을 생성하는 것을 목적으로 하지 않습니다.jar
s
어떤 경우mainClassName
속성 세트, 그 후:
$ ./gradlew run
를 기동합니다.main
속성으로 지정된 클래스의 메서드- 그
zip
/tar
를 사용하여 작성된 아카이브distZip
/distTar
태스크에는 스크립트가 포함되어 있습니다.이 스크립트는main
지정한 이전 클래스의 메서드.
메인 클래스를 설정하는 셸 스크립트의 행을 다음에 나타냅니다.
$ grep Main2 gradletest
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLETEST_OPTS -classpath "\"$CLASSPATH\"" com.caco3.gradletest.Main2 "$APP_ARGS"
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 ''
}
Denis Zavedeev의 답변을 보완하기 위해 Kotlin DSL(build.gradle.kts)을 위한 더 많은 방법을 소개합니다.
tasks.jar {
manifest.attributes["Main-Class"] = "com.example.MyMainClass"
}
tasks.jar {
manifest {
attributes["Main-Class"] = "com.example.MyMainClass"
}
}
참고: 실행 가능한 Fat JAR(Uber JAR라고도 함)를 작성하려면 이 게시물을 참조하십시오.
언급URL : https://stackoverflow.com/questions/32567167/gradle-no-main-manifest-attribute
'source' 카테고리의 다른 글
WordPress를 사용하여 URL에서 추가 변수를 전달하는 방법 (1) | 2022.09.25 |
---|---|
PHP에서 폐쇄란 무엇이며 왜 "사용" 식별자를 사용하는가? (0) | 2022.09.25 |
MySQL에서 중첩된 트랜잭션이 허용됩니까? (0) | 2022.09.25 |
값을 한 필드에서 두 필드로 분할 (1) | 2022.09.25 |
AWS RDS 연결 중단됨 Haproxy (0) | 2022.09.25 |