2016-02-06 7 views
7

के साथ डिफ़ॉल्ट जेवीएम तर्क कैसे जोड़ूं, मुझे ग्राडल के साथ निर्माण करते समय, मेरे जार में डिफ़ॉल्ट JVM विकल्प जोड़ने की आवश्यकता है। प्रलेखन मुझे मिल स्थापित करने के लिए है कि मैं से:मैं ग्राडल

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

मैंने लिखा कि यह क्या सबसे वेबसाइटों उदाहरण के रूप में देने के से अलग Gradle और डेवलपर कि build.gradle फ़ाइल में लिखा था के साथ बहुत ज्यादा नहीं अनुभव है।

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' 
} 

मैं कहाँ तर्क डाल करने के लिए पता नहीं है:

यहाँ build.gradle है। मैं उन्हें विभिन्न स्थानों में डाल करने की कोशिश की, लेकिन मैं हमेशा मिलती है:

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

बहुत धन्यवाद, Jhonny

+0

आपको JVM पैरामीटर जोड़ने की आवश्यकता कब है? क्या आप बस अपनी मुख्य कक्षा के प्रारंभिक स्थिरता में सिस्टम वैरिएबल सेट कर सकते हैं? – Ethan

+0

मुझे संकलन समय पर पैरामीटर जोड़ने की ज़रूरत है, इसलिए जब उपयोगकर्ता अपना प्रारंभ कर रहा है तो उपयोगकर्ता को इसे मैन्युअल रूप से जोड़ना नहीं है .jar – Jhonny007

+0

आप 'System.setproperty ("javafx.embed जैसे कुछ कर सकते हैं।सिंगल थ्रेड "," सच ") कोड में है, लेकिन आप यह सुनिश्चित करना चाहते हैं कि सिस्टम स्टेटस कहीं से कहीं भी पहुंचने से पहले यह कथन निष्पादित हो जाता है। – KKishore

उत्तर

15

मेरे सिर के ऊपर मैं 2 विकल्प के बारे में सोच सकते हैं से:

Option1:

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 
    } 
} 

विकल्प 2:: क्या @Ethan कहा, यह संभावना काम करेंगे क्या आवेदन प्लगइन का उपयोग करें + डिफ़ॉल्ट JVM को महत्व देता

build.gradle:

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

अब आप अपने कोड 2 तरीके चला सकते हैं:

Gradle

$gradle run 

वितरण (स्क्रिप्ट) से से

$gradle clean build distZip 

फिर Gradle एक ज़िप फ़ाइल कहीं ${your.projectdir}/build के तहत उत्पन्न करेगा: उत्पन्न स्क्रिप्ट है कि आवेदन प्लगइन प्रदान करेगा से। ज़िप को ढूंढें और इसे /bin के तहत अनजिप करें, आपको ${yourproject}.bat और ${yourproject} निष्पादन योग्य मिलेगा। एक के लिए लिनक्स/मैक है/यूनिक्स (${yourproject}) एक दूसरे को खिड़कियों के लिए है (${yourproject.bat})

+0

धन्यवाद, दूसरा विकल्प काम करता है। पहला विकल्प ऐसा लगता है जैसे यह काम करता था, लेकिन केवल इंटेलिजे में। जार लगता है एक अलग निष्पादन आदेश है, तो यह वहां काम नहीं किया। – Jhonny007

0

applicationDefaultJvmArgs Application प्लगइन द्वारा प्रदान की जाती है। तो यदि आप उस प्लगइन को लागू करते हैं, तो त्रुटि शायद दूर हो जाएगी, और आप मुख्य क्लासनाम नाम को पूरी तरह योग्य क्लास नाम, मुख्य विधि जिस पर आप आमंत्रित करना चाहते हैं, को सेट करने के बाद gradle run जारी करके प्रोग्राम निष्पादित करने में सक्षम होना चाहिए।

+2

ठीक है, इसमें गहराई से देखने के बाद, एप्लिकेशन प्लगइन केवल जेवीएम पैरामीटर को निष्पादित करने में सक्षम बनाता है धीरे-धीरे दौड़ें। लेकिन मुझे उन्हें .jar द्वारा निष्पादित करने की आवश्यकता है, जब उपभोक्ता आवेदन शुरू करना चाहता है। – Jhonny007

0

आप Gradle कार्य के साथ कमांड लाइन का उपयोग कर सकते हैं:

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) { 
} 

तो विकल्पों के साथ कार्य चलाने

ग्रेडल रन - साथ-डीबग

संबंधित मुद्दे