2012-01-27 14 views
12

के साथ स्कैला एसडब्ल्यूटी परियोजना एसबीटी में आप स्कैला एसडब्ल्यूटी परियोजना कैसे बनाते हैं?एसबीटी

मुझे पता है कि आप Git संग्रह का उपयोग कर सकते हैं:

RootProject(uri("http://git.eclipse.org/gitroot/platform/eclipse.platform.swt.binaries.git")) 

लेकिन मैं नहीं जानता कि कैसे और अगर यह SWT साथ संभव है।

अग्रिम धन्यवाद, Etam।

संपादित:

मैं इसे मैन्युअल डाउनलोड करने के लिए किया था। यह कम्पाइल लेकिन चल रहा है, जबकि मैं अमान्य धागा पहुँच त्रुटि मिलती है:

***WARNING: Display must be created on main thread due to Cocoa restrictions. 
[error] (run-main) org.eclipse.swt.SWTException: Invalid thread access 

यहां तक ​​कि अगर मैं का उपयोग करें:

javaOptions := Seq("-XstartOnFirstThread", "-d64") 

यह मुख्य वर्ग है:

import org.eclipse.swt._ 
import org.eclipse.swt.layout._ 
import org.eclipse.swt.widgets._ 

object Main extends App { 
    val display = new Display 
    val shell = new Shell(display) 
    shell.setLayout(new GridLayout()) 
    shell.pack 
    shell.open 
    while (!shell.isDisposed) { 
     if (!display.readAndDispatch) 
      display.sleep 
    } 
    display.dispose 
} 

धन्यवाद फिर से, एताम।

+0

क्या आपको इस मुद्दे का समाधान मिला? – mariosangiorgio

उत्तर

6

मुझे लगता है कि सबसे आसान तरीका आपके लक्षित प्लेटफ़ॉर्म की SWT जार फ़ाइल डाउनलोड है, इसे lib/ फ़ोल्डर के नीचे रखें, और यह ठीक काम करेगा।

+0

मैं इस समाधान से बचने की कोशिश कर रहा हूं;)। लेकिन धन्यवाद। – Etam

+2

अब मुझे अवैध थ्रेड एक्सेस त्रुटि के साथ कोई समस्या है ... क्या आप मेरे संपादन को देख सकते हैं? – Etam

2

मुझे आपके द्वारा किए गए समान थ्रेड एक्सेस त्रुटि का सामना करना पड़ा। ऐसा लगता है कि एसबीटी से आपके आवेदन को उसी जेवीएम में उप-प्रक्रिया के रूप में लॉन्च करने के लिए आता है क्योंकि एसबीटी स्वयं चल रहा है।

मैं इसे स्वयं एक जार अपने आवेदन के निर्माण, और फिर चल द्वारा हल:

scala -classpath "target/scala-2.9.1/foobar-0.0.1.jar:lib/swt-debug.jar" -J"-XstartOnFirstThread" foo.bar.HelloWorld 

एक और अधिक सुरुचिपूर्ण समाधान हो सकती है, लेकिन यह कम से कम मुझे जहाँ तक मिल गया अपने आवेदन चलाने के लिए सक्षम होने के रूप में।

10

अपने build.sbt को यह करें:

resolvers += "swt-repo" at "http://maven-eclipse.github.io/maven" 

libraryDependencies += { 
    val os = (sys.props("os.name"), sys.props("os.arch")) match { 
    case ("Linux", _) => "gtk.linux.x86" 
    case ("Mac OS X", "amd64" | "x86_64") => "cocoa.macosx.x86_64" 
    case ("Mac OS X", _) => "cocoa.macosx.x86" 
    case (os, "amd64") if os.startsWith("Windows") => "win32.win32.x86_64" 
    case (os, _) if os.startsWith("Windows") => "win32.win32.x86" 
    case (os, arch) => sys.error("Cannot obtain lib for OS '" + os + "' and architecture '" + arch + "'") 
    } 
    val artifact = "org.eclipse.swt." + os 
    "org.eclipse.swt" % artifact % "4.6.1" 
} 

यह पहली SWT विरूपण साक्ष्य भंडार के लिए एक समाधानकर्ता जोड़ देगा। फिर यह आपके ओएस संस्करण का पता लगाएगा और इसके लिए उपयुक्त जार डाउनलोड करेगा।

थ्रेड एक्सेस समस्या के लिए, मैंने इसे मैक ओएस एक्स पर जेडीके 1.6 का उपयोग करके हल किया - जब मैं वहां -XstartOnFirstThread निर्दिष्ट करता हूं, तो यह ठीक काम करता है। मुझे जेडीके 1.7 के लिए कोई समाधान नहीं मिला है।

+0

क्या आप कृपया मुझे बता सकते हैं कि मुझे सही जेडीके संस्करण कैसे सेट करना चाहिए? जब 'sbt' शुरू होता है तो मुझे यह संदेश मिलता है' स्कैला संस्करण 2.9.1.फिनल (जावा हॉटस्पॉट (टीएम) 64-बिट सर्वर वीएम, जावा 1.6.0_35) में आपका स्वागत है। लेकिन यह अभी भी मेरे लिए काम नहीं करता है। मैंने आपके द्वारा सुझाई गई निर्भरता को जोड़ा और 'javaOptions: = Seq ("- XstartOnFirstThread", "-d64") सेट किया। – mariosangiorgio

+0

मैं आमतौर पर इसे बैश स्तर पर करता हूं, मेरे पास एक स्क्रिप्ट है जो मेरे लिए यह करती है: 'JAVA_HOME =/सिस्टम/लाइब्रेरी/फ्रेमवर्क/जावावीएम.फ्रेमवर्क/संस्करण/1.6/होम' ' जेडीके_एचओएमई = $ जावा-एचओएमई ' ' पाथ = $ JAVA_HOME/bin: $ PATH', इसलिए जब 'sbt' चलता है तो यह' जावा 'से डिफ़ॉल्ट जावा उठाता है। – axel22

+0

हालांकि, आप पहले से ही जावा 1.6 का उपयोग कर रहे हैं। निश्चित नहीं है, लेकिन यह संभव है कि '-XstartOnFirstThread' को 'javaOptions' से नहीं लिया गया है। मैं आमतौर पर स्क्रिप्ट के माध्यम से अलग से अपना आवेदन चलाता हूं, और एसबीटी के माध्यम से नहीं, इसलिए मुझे यह समस्या नहीं थी। आप 'javaOptions',' build.sbt' या 'project' dir' कहां सेट करते हैं? – axel22