10GritSandpaper :
나는 사용하여 내 프로젝트를 실행할 수 있습니다 gradle run
,하지만 난 사용하여 jar 파일을 실행할 수 없습니다 java -jar
. :이 샘플 프로젝트에 오류 다시 한 GitHub의에서 프로젝트에 링크를
이를 통해 프로젝트를 실행 한 출력 gradlew
$ ./gradlew run
> Task :run
Hello world.
BUILD SUCCESSFUL in 4s
이 프로젝트를 실행 한 출력 java -jar
$ ./gradlew build
BUILD SUCCESSFUL in 6s
$ java -jar build/libs/emailer.jar
Error: Could not find or load main class us.company.emailer.App
하지만 때 unzip
는 jar
, 내가 볼 수 있습니다App.class
user@computer:../libs$ unzip emailer.jar
Archive: emailer.jar
creating: META-INF/
inflating: META-INF/MANIFEST.MF
creating: us/
creating: us/company/
creating: us/company/emailer/
inflating: us/company/emailer/App.class
여기 년대 build.gradle
plugins {
id 'groovy'
id 'application'
}
repositories {
jcenter()
mavenCentral()
}
dependencies {
implementation 'org.codehaus.groovy:groovy-all:2.5.6'
testImplementation 'org.spockframework:spock-core:1.2-groovy-2.5'
compile 'org.apache.commons:commons-email:1.5'
}
mainClassName = 'us.company.emailer.App'
jar {
manifest {
attributes(
'Class-Path': configurations.compile.collect { it.getName() }.join(' '),
'Main-Class': 'us.company.emailer.App'
)
}
}
sourceSets.main.java.srcDirs = ['src/main/groovy']
여기 년대 App.groovy
package us.company.emailer
class App {
String getGreeting() {
return 'Hello world.'
}
static void main(String[] args) {
println new App().greeting
}
}
편집 : 추가 MANIFEST.MF
@tkruse에서 주석에 응답
Manifest-Version: 1.0
Class-Path: commons-email-1.5.jar javax.mail-1.5.6.jar activation-1.1.
jar
Main-Class: us.company.emailer.App
tim_yates :
문제는 클래스 경로입니다. 당신이 안에 보면 META-INF/MANIFEST.mf
파일, 당신은 그것의 세트를 볼 수 있습니다
Class-Path: commons-email-1.5.jar javax.mail-1.5.6.jar activation-1.1.
jar
자바 실행, 그것은 이러한 것들 중 하나가 있습니다 아무 생각이없는 경우, 또한 그루비 코드를 이해하기 위해 Groovy의 런타임을 필요로한다.
이를위한 가장 간단한 방법은 '로 모든 종속성을 번들하는 지방 단지 "및 Gradle을 함께이를위한 가장 간단한 방법은 우수 그림자 항아리 플러그인 .
당신은 당신에 다음을 추가하는 경우 plugins
에 블록 build.gradle
:
id 'com.github.johnrengelman.shadow' version '5.0.0'
(당신은 삭제할 수 있습니다 jar
블록과 라인을 조작하는 sourceSets이)
그런 다음 실행 ./gradlew shadowJar
당신은 jar 파일을 얻을 것이다 emailer-all.jar
어느 실행할 수 있습니다 :
$ java -jar build/libs/emailer-all.jar
Hello world.
완성도를 들어, 다음은 전체 build.gradle 파일입니다 :
plugins {
id 'groovy'
id 'application'
id 'com.github.johnrengelman.shadow' version '5.0.0'
}
repositories {
jcenter()
mavenCentral()
}
dependencies {
implementation 'org.codehaus.groovy:groovy-all:2.5.6'
testImplementation 'org.spockframework:spock-core:1.2-groovy-2.5'
implementation 'org.apache.commons:commons-email:1.5'
}
mainClassName = 'us.company.emailer.App'