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")
}
}
नोट :
- एक प्लगइन को लागू करने के लिए, बस प्रकार
ProjectPluginविशेषता का विस्तार करें और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")
}
बस! अब आप एक ही पुराने बॉयलरप्लेट को दोहराए बिना अपनी सभी परियोजनाओं में इस प्लगइन का उपयोग कर सकते हैं।