Scala Language
ग्रेडिंग के साथ काम करना
खोज…
बुनियादी ढांचा
इन सामग्रियों के साथ
SCALA_PROJECT/build.gradle
नामक एक फ़ाइल बनाएँ:group 'scala_gradle' version '1.0-SNAPSHOT' apply plugin: 'scala' repositories { jcenter() mavenCentral() maven { url "https://repo.typesafe.com/typesafe/maven-releases" } } dependencies { compile group: 'org.scala-lang', name: 'scala-library', version: '2.10.6' } task "create-dirs" << { sourceSets*.scala.srcDirs*.each { it.mkdirs() } sourceSets*.resources.srcDirs*.each { it.mkdirs() } }
उपलब्ध कार्यों को देखने के लिए
gradle tasks
चलाएं।src/scala, src/resources
डायरेक्टरीgradle create-dirs
चलाएं।प्रोजेक्ट बनाने और निर्भरता डाउनलोड करने के लिए रन
gradle build
।
अपनी खुद की ग्रेड स्कैला प्लगइन बनाएं
बेसिक सेटअप उदाहरण के माध्यम से जाने के बाद, आप अपने आप को हर एक स्काला ग्रैडल प्रोजेक्ट में इसका अधिकांश भाग दोहरा सकते हैं। बॉयलरप्लेट कोड जैसी गंध ...
क्या होगा, अगर ग्रेडल द्वारा पेश किए गए स्काला प्लगइन को लागू करने के बजाय, आप अपने स्वयं के स्काला प्लगइन को लागू कर सकते हैं, जो आपके सभी सामान्य बिल्ड लॉजिक को संभालने के लिए जिम्मेदार होगा, उसी समय, पहले से मौजूद प्लगइन।
यह उदाहरण पिछले बिल्ड लॉजिक को पुन: उपयोग करने योग्य ग्रेडल प्लगइन में बदलने वाला है।
लकीली, ग्रेड में, आप आसानी से कस्टम एपीआई को ग्रैडल एपीआई की मदद से लिख सकते हैं, जैसा कि प्रलेखन में उल्लिखित है। कार्यान्वयन की भाषा के रूप में, आप स्वयं या यहां तक कि जावा का उपयोग कर सकते हैं। हालाँकि, अधिकांश उदाहरण जो आप डॉक्स में पा सकते हैं, ग्रूवी में लिखे गए हैं। यदि आपको अधिक कोड नमूनों की आवश्यकता है या आप यह समझना चाहते हैं कि स्कैला प्लगइन के पीछे क्या है, उदाहरण के लिए, आप ग्रैंगल गीथो रेपो की जांच कर सकते हैं।
प्लगइन लेखन
आवश्यकताएँकस्टम प्लगइन एक परियोजना में लागू होने पर निम्नलिखित कार्यक्षमता जोड़ देगा:
- एक
scalaVersion
संपत्ति ऑब्जेक्ट, जिसमें दो अतिदेय डिफ़ॉल्ट गुण होंगे- प्रमुख = "2.12"
- मामूली = "0"
-
withScalaVersion
फ़ंक्शन, जो एक निर्भरता नाम पर लागू होता है, द्विआधारी संगतता सुनिश्चित करने के लिए स्काला प्रमुख संस्करण जोड़ देगा (sbt%%
ऑपरेटर घंटी बजा सकता है, अन्यथा आगे बढ़ने से पहले यहां जाएं) -
createDirs
कार्य आवश्यक निर्देशिका ट्री बनाने के लिए, पिछले उदाहरण के रूप में
- एक नया ग्रेडल प्रोजेक्ट बनाएं और निम्न को
build.gradle
जोड़ें
apply plugin: 'scala'
apply plugin: 'maven'
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
compile gradleApi()
compile "org.scala-lang:scala-library:2.12.0"
}
नोट :
- प्लगइन कार्यान्वयन स्काला में लिखा गया है, इस प्रकार हमें ग्रेडल स्काला प्लगिन की आवश्यकता है
- अन्य परियोजनाओं से प्लगइन का उपयोग करने के लिए, ग्रेडल मेवेन प्लगिन का उपयोग किया जाता है; इसमें प्रोजेक्ट जार को मावेन लोकल रिपॉजिटरी में सहेजने के लिए उपयोग किए गए
install
टास्क को जोड़ा गया है -
compile gradleApi()
gradle-api-<gradle_version>.jar
कोgradle-api-<gradle_version>.jar
जोड़ता है
- प्लगइन कार्यान्वयन के लिए एक नया स्काला क्लास बनाएं
package com.btesila.gradle.plugins import org.gradle.api.{Plugin, Project} class ScalaCustomPlugin extends Plugin[Project] { override def apply(project: Project): Unit = { project.getPlugins.apply("scala") } }
नोट :
- एक प्लगइन को लागू करने के लिए, बस प्रकार
Project
Plugin
विशेषता का विस्तार करें औरapply
विधि को ओवरराइड करें - लागू करने की विधि के भीतर, आप उस
Project
उदाहरण तक पहुँच सकते हैं, जिस पर प्लगइन लागू होता है और आप इसे बिल्ड लॉजिक को जोड़ने के लिए उपयोग कर सकते हैं - यह प्लगइन कुछ भी नहीं करता है लेकिन पहले से मौजूद ग्रेडल स्काला प्लगिन को लागू करता है
-
scalaVersion
ऑब्जेक्ट गुण जोड़ें
सबसे पहले, हम एक ScalaVersion
वर्ग बनाते हैं, जो दो संस्करण गुणों को धारण करेगा
class ScalaVersion {
var major: String = "2.12"
var minor: String = "0"
}
ग्रैडल प्लगइन्स के बारे में एक अच्छी बात यह है कि आप हमेशा विशिष्ट गुणों को जोड़ या ओवरराइड कर सकते हैं। एक प्लगइन माध्यम से उपयोगकर्ता इनपुट के इस प्रकार प्राप्त करता है ExtensionContainer
एक Gradle से जुड़ी Project
उदाहरण। अधिक जानकारी के लिए, इसे देखें।
निम्नलिखित को apply
विधि में जोड़कर, हम मूल रूप से ऐसा कर रहे हैं:
- अगर वहाँ एक नहीं है
scalaVersion
संपत्ति परियोजना में परिभाषित किया गया है, हम मूलभूत मूल्यों के साथ एक जोड़ने - अन्यथा, हमें वर्तमान में
ScalaVersion
उदाहरण के रूप मेंScalaVersion
, इसे आगे उपयोग करने के लिए
var scalaVersion = new ScalaVersion
if (!project.getExtensions.getExtraProperties.has("scalaVersion"))
project.getExtensions.getExtraProperties.set("scalaVersion", scalaVersion)
else
scalaVersion = project.getExtensions.getExtraProperties.get("scalaVersion").asInstanceOf[ScalaVersion]
यह प्लगइन को लागू करने वाली परियोजना की बिल्ड फ़ाइल के लिए निम्नलिखित लिखने के बराबर है:
ext {
scalaVersion.major = "2.12"
scalaVersion.minor = "0"
}
-
scalaVersion
का उपयोग करते हुए, प्रोजेक्ट निर्भरता के लिएscala-lang
लाइब्रेरीscalaVersion
project.getDependencies.add("compile", s"org.scala-lang:scala-library:${scalaVersion.major}.${scalaVersion.minor}")
यह प्लगइन को लागू करने वाली परियोजना की बिल्ड फ़ाइल के लिए निम्नलिखित लिखने के बराबर है:
compile "org.scala-lang:scala-library:2.12.0"
-
withScalaVersion
फ़ंक्शन जोड़ें
val withScalaVersion = (lib: String) => {
val libComp = lib.split(":")
libComp.update(1, s"${libComp(1)}_${scalaVersion.major}")
libComp.mkString(":")
}
project.getExtensions.getExtraProperties.set("withScalaVersion", withScalaVersion)
- अंत में,
createDirs
कार्य बनाएं और इसे प्रोजेक्ट में जोड़ें
DefaultTask
बढ़ाकर एक ग्रेड कार्य लागू करें:
class CreateDirs extends DefaultTask {
@TaskAction
def createDirs(): Unit = {
val sourceSetContainer = this.getProject.getConvention.getPlugin(classOf[JavaPluginConvention]).getSourceSets
sourceSetContainer forEach { sourceSet =>
sourceSet.getAllSource.getSrcDirs.forEach(file => if (!file.getName.contains("java")) file.mkdirs())
}
}
}
नोट : SourceSetContainer
पास परियोजना में मौजूद सभी स्रोत निर्देशिकाओं के बारे में जानकारी है। ग्रैडल स्कैला प्लगिन क्या करता है, जावा वाले को अतिरिक्त स्रोत सेट जोड़ना है, जैसा कि आप प्लगइन डॉक्स में देख सकते हैं।
इसे apply
विधि से जोड़कर प्रोजेक्ट में createDir
कार्य जोड़ें:
project.getTasks.create("createDirs", classOf[CreateDirs])
अंत में, आपके ScalaCustomPlugin
वर्ग को इस तरह दिखना चाहिए:
class ScalaCustomPlugin extends Plugin[Project] {
override def apply(project: Project): Unit = {
project.getPlugins.apply("scala")
var scalaVersion = new ScalaVersion
if (!project.getExtensions.getExtraProperties.has("scalaVersion"))
project.getExtensions.getExtraProperties.set("scalaVersion", scalaVersion)
else
scalaVersion = project.getExtensions.getExtraProperties.get("scalaVersion").asInstanceOf[ScalaVersion]
project.getDependencies.add("compile", s"org.scala-lang:scala-library:${scalaVersion.major}.${scalaVersion.minor}")
val withScalaVersion = (lib: String) => {
val libComp = lib.split(":")
libComp.update(1, s"${libComp(1)}_${scalaVersion.major}")
libComp.mkString(":")
}
project.getExtensions.getExtraProperties.set("withScalaVersion", withScalaVersion)
project.getTasks.create("createDirs", classOf[CreateDirs])
}
}
स्थानीय मावेन भंडार के लिए प्लगइन परियोजना स्थापित करना यह वास्तव में आसान हो रहा है रनिंग gradle install
आप स्थानीय रिपॉजिटरी डायरेक्टरी में जाकर इंस्टॉलेशन की जांच कर सकते हैं, जो आमतौर पर ~/.m2/repository
पाया जाता ~/.m2/repository
प्रत्येक Gradle plugin में एक id
होती है जिसका उपयोग apply
statement में किया जाता है। उदाहरण के लिए, बिल्ड फ़ाइल के लिए निम्नलिखित लिखकर, यह आईडी scala
साथ प्लगइन को खोजने और लागू करने के लिए एक ट्रिगर टू ग्रैडल में अनुवाद करता है।
apply plugin: 'scala'
उसी तरह, हम अपने नए प्लगइन को निम्नलिखित तरीके से लागू करना चाहेंगे,
apply plugin: "com.btesila.scala.plugin"
इसका अर्थ है कि हमारे प्लगइन में com.btesila.scala.plugin
id होगी।
इस आईडी को सेट करने के लिए, निम्न फ़ाइल जोड़ें:
src / मुख्य / संसाधन / META-INF / Gradle-प्लगइन / com.btesil.scala.plugin.properties
implementation-class=com.btesila.gradle.plugins.ScalaCustomPlugin
बाद में, फिर से gradle install
।
प्लगइन का उपयोग करना
- एक नया खाली ग्रेडल प्रोजेक्ट बनाएं और निम्न को बिल्ड फ़ाइल में जोड़ें
buildscript {
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
//modify this path to match the installed plugin project in your local repository
classpath 'com.btesila:working-with-gradle:1.0-SNAPSHOT'
}
}
repositories {
mavenLocal()
mavenCentral()
}
apply plugin: "com.btesila.scala.plugin"
-
gradle createDirs
- आपको अब सभी सोर्स डायरेक्टरी जनरेट करनी चाहिए - निर्माण फ़ाइल में इसे जोड़कर स्कैला संस्करण को ओवरराइड करें:
ext {
scalaVersion.major = "2.11"
scalaVersion.minor = "8"
}
println(project.ext.scalaVersion.major)
println(project.ext.scalaVersion.minor)
- एक निर्भरता लायब्रेरी जोड़ें जो स्केल संस्करण के साथ बाइनरी संगत है
dependencies {
compile withScalaVersion("com.typesafe.scala-logging:scala-logging:3.5.0")
}
बस! अब आप एक ही पुराने बॉयलरप्लेट को दोहराए बिना अपनी सभी परियोजनाओं में इस प्लगइन का उपयोग कर सकते हैं।