2015-06-15 3 views
5

में सेटिंग पर निर्भर कैसे करें I ए और बी कहें, 2 कस्टम एसबीटी सेटिंग्स कैसे घोषित कर सकते हैं, ए पर निर्भर सामग्री के साथ Global कॉन्फ़िगरेशन स्कोप में बी को परिभाषित करें, कई कॉन्फ़िगरेशन स्कॉप्स में एक अलग परिभाषित करें इस तरह से बी के परिणामस्वरूप मूल्य प्रत्येक कॉन्फ़िगरेशन में भिन्न है भले ही बी केवल एक बार परिभाषित किया गया हो?"वर्तमान" कॉन्फ़िगरेशन

नीचे दिए गए उदाहरण targetHost के लिए विचार करें, अन्य config में से remote में अलग ढंग से परिभाषित है, और scriptContent यह पर निर्भर करता है:

object MyBuild extends Build { 

    lazy val remote = config("remote") describedAs ("configuration for remote environement ") 

    lazy val targetHost = settingKey[String]("private hostname of master server") 

    lazy val scriptContent = settingKey[String]("Some deployment script") 

    lazy val root: Project = Project("meme", file(".")). 
    settings(
     name := "hello", 

     targetHost := "localhost", 
     targetHost in remote := "snoopy", 

     scriptContent := s""" 
      # some bash deployment here 
      /usr/local/uberDeploy.sh ${targetHost.value} 
     """ 
    )  
} 

मैं scriptContent चाहते हैं दोनों config कार्यक्षेत्रों में मान अलग है, लेकिन क्योंकि यह निर्भर करता है

> scriptContent 
[info] 
[info]    # some bash deployment here 
[info]    /usr/local/uberDeploy.sh localhost 
[info] 
> remote:scriptContent 
[info] 
[info]    # some bash deployment here 
[info]    /usr/local/uberDeploy.sh localhost 
[info] 

जबकि मैं निम्नलिखित प्राप्त करने के लिए करना चाहते हैं: Global दायरे में targetHost पर अपने मूल्य हमेशा एक ही है:

> scriptContent 
[info] 
[info]    # some bash deployment here 
[info]    /usr/local/uberDeploy.sh localhost 
[info] 
> remote:scriptContent 
[info] 
[info]    # some bash deployment here 
[info]    /usr/local/uberDeploy.sh snoopy 
[info] 
+0

मुझे लगता है कि आप स्पष्ट रूप से कार्य का दायरा निर्दिष्ट करना होगा:

import sbt._ import sbt.Keys._ object MyBuild extends Build { lazy val remote = config("remote") describedAs ("configuration for remote environement ") lazy val targetHost = settingKey[String]("private hostname of master server") lazy val scriptContent = settingKey[String]("Some deployment script") lazy val scriptSettings = Seq( scriptContent := s""" # some bash deployment here /usr/local/uberDeploy.sh ${targetHost.value} """ ) lazy val root: Project = Project("meme", file(".")) .settings( name := "hello", targetHost := "localhost", targetHost in remote := "snoopy" ) .settings(scriptSettings: _*) .settings(inConfig(remote)(scriptSettings) :_*) } 

अपेक्षित परिणाम अर्जित करता है। उदाहरण के लिए, दूसरे में एक 'सरल' लक्ष्यहोस्ट 'में' रिमोट में लक्ष्यहोस्ट 'के साथ दोनों स्कॉप्स में दो' स्क्रिप्ट सामग्री 'लागू करें। – marios

उत्तर

0

इसे मिला! मेरा सवाल वास्तव में एक डुप्लिकेट है (क्षमा करें ...), और सबसे प्रासंगिक उत्तर यहां है: How can i make an SBT key see settings for the current configuration?

=> हमें फिर से मूल्यांकन को मजबूर करने के लिए प्रत्येक स्कोप के लिए कई बार सेटिंग्स को लागू करने की आवश्यकता है scriptSetting की सामग्री की:

> scriptContent 
[info] 
[info]    # some bash deployment here 
[info]    /usr/local/uberDeploy.sh localhost 
[info] 
> remote:scriptContent 
[info] 
[info]    # some bash deployment here 
[info]    /usr/local/uberDeploy.sh snoopy 
[info] 
> 
संबंधित मुद्दे