我想從我的第一個groovy腳本中創建一個jar。我的項目結構如下:爲什麼我需要指定'來自文件'?
- build.gradle
- src\main\groovy\app\Test.groovy
我原來的劇本的gradle:
apply plugin: 'groovy'
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
compile 'org.codehaus.groovy:groovy-all:2.3.11'
testCompile group: 'junit', name: 'junit', version: '4.11'
}
sourceSets.main.groovy.srcDirs = ["src/main/groovy"]
jar {
manifest {
attributes('Main-Class': 'app.Test')
}
}
從我讀的指南,這應該創建一個可運行的罐子。當我嘗試運行它,雖然我總是
Error: Could not find or load main class app.Test
我現在發現,我需要將以下兩行添加到罐子任務的錯誤:
from files(sourceSets.main.output.classesDir)
from configurations.runtime.asFileTree.files.collect { zipTree(it) }
奇怪的是,如果我用一個Test.java類(相同的內容)替換groovy腳本,我不需要這兩個額外的行來運行jar。 我找不到爲什麼我需要他們或他們到底做了什麼。任何人都可以解釋,或提供文檔鏈接?
我是新來的,請幫我解決我的錯誤。
EDIT
通過tim_yates建議的代碼被轉換與下列內容到Test.jar的: META-INF/MANIFEST.MF
Manifest-Version: 1.0
Main-Class: app.Test
應用程序/的Test.class
package app;
import groovy.lang.GroovyObject;
import groovy.lang.MetaClass;
import org.codehaus.groovy.runtime.callsite.CallSite;
public class Test implements GroovyObject {
public Test() {
CallSite[] var1 = $getCallSiteArray();
MetaClass var2 = this.$getStaticMetaClass();
this.metaClass = var2;
}
public static void main(String... args) {
CallSite[] var1 = $getCallSiteArray();
var1[0].callStatic(Test.class, "Hi!");
}
}
我執行以下聲明:
java -jar test.jar
這會導致上述錯誤消息。
謝謝 - 有道理。 –