2016-02-06 26 views
7

ile nasıl ekleyebilirim? Gradle'la oluşturduğumda, varsayılan JVM seçeneklerini jar'ma eklemem gerekir. Ben ayarlamak zorunda got belgelerine :Varsayılan JVM argümanlarını Gradle

applicationDefaultJvmArgs = ["-Djavafx.embed.singleThread=true"] 

Ben farklı pek çok web örnek olarak vermek ne yazmış Gradle ve build.gradle dosyasını yazdı geliştirici ile pek deneyimim var.

apply plugin: 'java' 
apply plugin: 'eclipse' 

version = '0.1' 

repositories { 
    mavenCentral() 
} 

dependencies { 
    testCompile group: 'junit', name: 'junit', version: '4.+' 
    compile 'placeholder' 
} 

task release(type: Jar) { 
    manifest { 
     attributes("Implementation-Title": "placeholder", 
       "Implementation-Version": version, 
       'Main-Class': 'placeholder.Application') 
    } 
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } 

    with jar 
} 

task wrapper(type: Wrapper) { 
    gradleVersion = '2.2.1' 
} 

Ben argümanları koymak bilmiyorum: Burada

build.gradle olduğunu. Ben farklı yerlerde koyarak denedim ama hep olsun:

A problem occurred evaluating root project 'placeholder'. 
> No such property: applicationDefaultJvmArgs for class: org.gradle.api.tasks.bundling.Jar_Decorated 

Çok teşekkürler, Jhonny

+0

JVM parametresini ne zaman eklemeniz gerekiyor? Sistem değişkenini ana sınıfınızın başlatılması durağanlığına ayarlayabilir misiniz? – Ethan

+0

Parametreyi derleme zamanında eklemem gerekiyor, böylece kullanıcı .jar 'ı başlatırken el kitabını eklemesi gerekmiyor. – Jhonny007

+0

Sistem.setproperty ("javafx.embed" gibi bir şey yapabilirsiniz.tekil "", "true") kodunda, ancak bu özelliğin sistem özelliğine erişilmeden önce yürütülmesini sağlayabilirsiniz. – KKishore

cevap

15

:

Seçenek1:

package placeholder; 

//your imports 

public class Application{ 
    static { 
     System.getProperties().set("javafx.embed.singleThread", "true"); 
    } 
    // your code 
    public static void main(String... args){ 
    //your code 
    } 
} 

Seçenek 2: @Ethan, büyük olasılıkla çalışacağız söylediklerini yapın uygulama eklentiyi kullanın + varsayılan jvm değerleri

build.gradle:

apply plugin: 'application' 
//your code 
applicationDefaultJvmArgs = ["-Djavafx.embed.singleThread=true"] 

Artık kod 2 yollarını çalıştırabilirsiniz: Dağıtım (senaryo) Gönderen gradle

$gradle run 

itibaren

.

$gradle clean build distZip 

Sonra gradle ${your.projectdir}/build altında bir yerde bir zip dosyası oluşturur: Uygulama eklentisi sağlayacak oluşturulan komut. Zip dosyasını bulun ve sıkıştırın ve /bin'un altında bir ${yourproject}.bat ve ${yourproject} yürütülebilir dosyaları bulacaksınız. Bir Linux/mac içindir/Unix (${yourproject}) diğeri pencereler içindir (${yourproject.bat})

+0

Teşekkür ederim, ikinci seçenek işe yaradı.İlk seçenek işe yaramış gibi görünüyordu, ama sadece IntelliJ'de. farklı bir idam emri var, o yüzden orada çalışmadı. – Jhonny007

0

applicationDefaultJvmArgs Application eklenti tarafından sağlanmaktadır. Bu eklentiyi uygularsanız, hata büyük olasılıkla gider ve mainClassName özelliğini, çağırmak istediğiniz ana yöntem olan tam nitelikli sınıf adına ayarladıktan sonra gradle run yayınlayarak programı çalıştırabilmeniz gerekir. Ben 2 seçenekten düşünebiliriz başımın tepesinden

+2

Tamam, daha derinlemesine baktıktan sonra, Uygulama eklentisi yalnızca jvm parametrelerinin Gradle run.Personel, uygulamayı başlatmak istediğinde .jar tarafından çalıştırılmasına ihtiyacım var. – Jhonny007

0

Eğer gradle görevle komut satırını kullanabilirsiniz:

class AppRun extends JavaExec { 
    private boolean withDebug 

    @Option(option = "with-debug", description = "enable debug for the process. ") 
    public void setDebugMode(boolean debug) { 
     this.withDebug = debug 
    } 

    public boolean getDebugMode() { 
     return this.withDebug 
    } 
} 

task run(type: AppRun) { 
} 

sonra seçenekleriyle görevi çalıştırmak

işaretçiyi çalıştırın --with-debug