কীভাবে এসবিটি গিট থেকে নির্ভরতা শৈলীগুলি টানতে পারে?


102

আমি শুনেছি (এবং আমি জানি আমি উদাহরণগুলিও দেখেছি, কেবল যদি আমি মনে করতে পারি তবে কোথায়) sbtগিট রেপো থেকে নির্ভরতা অর্জন করতে পারে।

আমি গিথুব থেকে নির্ভরতা হারাহা / আপ পেতে চাইছি । ভান্ডারটি কোনও আর্টিক্ট জেআর ফাইল সরবরাহ করে না, কেবল একটি উত্স ট্রি যা ব্যবহার করে নির্মিত হবে sbt। আমি যে প্রক্রিয়াটি কল্পনা করছি তা হ'ল sbtউত্স রেপো ডাউনলোড করবে, এটি তৈরি করবে এবং তারপরে নির্ভরতা শিল্পকর্ম হিসাবে ব্যবহার করবে।

আমি কল্পনা sbtকরতে পারি যা বাস্তবে এরকম কিছু করতে পারে। এটা করতে পারেন? এবং যদি তা হয়, কিভাবে?

উত্তর:


77

হ্যাঁ সত্যই। আপনি অপারেটরের Projectসাথে আপনার নির্ভরতা দিতে পারেন dependsOn, এবং উদাহরণস্বরূপ, আপনি একটি ইউটিআর দ্বারা একটি গিথুব প্রকল্পটি উল্লেখ করতে পারেন RootProject(uri("git://github.com/dragos/dupcheck.git"))। বিকল্পভাবে, আপনি git cloneপ্রকল্পটি করতে পারেন এবং তারপরে আপনার স্থানীয় অনুলিপিটির সাথে উল্লেখ করতে পারেন RootProject(file(...))। বিশদ এবং উদাহরণের জন্য এসবিটি উইকিতে "সম্পূর্ণ কনফিগারেশন" দেখুন ।


6
আপনি কি জানেন যে এটি অন্তর্ভুক্ত করা সম্ভব কিনা build.sbt?
ওয়েন

13
দুর্দান্ত অন্তর্দৃষ্টি। কিন্তু যদি প্রকল্পটি পরিবর্তন হয়, আপনি কীভাবে sbtএটি পুনরায় সংকলন করতে বাধ্য করবেন? cleanসাহায্য বলে মনে হচ্ছে না।
axel22

2
হাই এক্সেল 22, আপনি কি আপনার সমস্যার কোনও সমাধান খুঁজে পেয়েছেন?
জিমি লুং

4
গিট রেপো ব্যক্তিগত যেখানে আপনি কীভাবে এটি কনফিগার করতে পারেন? একটি ডিপ্লাই কী প্রেরণের জন্য এসবিটি কনফিগার করার কোনও উপায় আছে যা একটি ডটফিল বা পরিবেশের পরিবর্তনশীলে সেট করা যেতে পারে?
আকজয়

1
আমি আরও জানতে চাই যে গিথুব সংগ্রহস্থলে নতুন প্রতিশ্রুতি দেওয়ার পরে কীভাবে এসবিটি টান পরিবর্তন করা যায়, যদি আমি এটি নির্দেশ করি #master, পুনরায় লোড করুন, এটি ক্লোন করে ফেলেছে, তবে আমি মাস্টারকে নতুন প্রতিশ্রুতি দিচ্ছি এবং এসবিটি এখনও মূল ক্লোন করা সংগ্রহস্থলের সাথে কাজ করে একটি নতুন প্রতিশ্রুতি বিবেচনা না করে। এই মুহুর্তে একজনকে এটিকে মুছে ফেলতে হবে /.sbt/0.13/staging/এবং এটি আবার ক্লোন করতে হবে বা সেখানে গিয়ে এবং করতে হবেgit pull
লিসাক

99

dependsOnঅপারেটরটি ব্যবহার করে আপনি প্রকল্পের নির্ভরতা হিসাবে বিবেচনা করে আপনার প্রকল্পের মধ্যে আন-প্যাকেজযুক্ত নির্ভরতাগুলি গিটহাব থেকে আমদানি করতে পারেন । (প্রাক-কম্পাইল লাইব্রেরি নির্ভরতা অন্তর্ভুক্ত করার উপায় থেকে এটি পৃথক))

#নোটেশন ব্যবহার করে কোন শাখাটি টানতে হবে তা আপনি উল্লেখ করতে পারেন নোট করুন। এখানে কিছু স্কালা এসবিটি কোড যা আমার পক্ষে ভালভাবে কাজ করছে:

object V {
  val depProject = "master"
  // Other library versions
}

object Projects {
  lazy val depProject = RootProject(uri("git://github.com/me/dep-project.git#%s".format(V.depProject)))
}

// Library dependencies
lazy val myProject = Project("my-project", file("."))
.settings(myProjectSettings: _*)
.dependsOn(Projects.depProject)
.settings(
  libraryDependencies ++= Seq(...

মনে রাখবেন যে আপনার যদি একই বহিরাগত প্রকল্পের উপর নির্ভরশীল একাধিক এসবিটি প্রকল্প থাকে, sbt.boot.directoryঅপ্রয়োজনীয় পুনঃসংযোগগুলি এড়াতে একটি কেন্দ্রীয় স্থাপন মূল্যবান ( এখানে নির্দেশাবলী দেখুন )।


7
"গিট টান" দিয়ে স্থানীয় গিটটি আপডেট রাখতে পারে এসবিটি? নাকি আমাকে নিজেই তা করা দরকার?
আরনে

প্রকল্পের রুট থেকে সেটিংটি "my-project"ব্যবহার করে গতিশীল সেট করা সম্ভব ? name := "MyProject"build.sbt
ড্যানিয়েল

2
git://প্রোটোকল সিনট্যাক্স 13.0.0 প্লে / এসবিটিতে আমার জন্য কাজ করে না বলে মনে হচ্ছে। https://যদিও কাজ করে। এটি একটি গিট নির্দিষ্ট সেটিংসের কারণেও হতে পারে।
সেবাস্তিয়ান গ্রাফ

এসবিটি 0.13.9 ব্যবহার করে এবং এসবিটি একটি অগভীর ক্লোন (গিট ক্লোন - ডিপথ 1) ব্যবহার করে গিট নির্ভরতা সঠিকভাবে আপডেট করে।
মার্টিন ট্যাপ

2
ব্রাঞ্চটি যদি সেট করা থাকে তবেই তা কাজ করে master, অন্যথায় আমি পাই:[error] No project 'project_name' in 'ssh://git@github.com/user/project.git#branch'
নিল

9

যেহেতু আমার লাইব্রেরিটির নির্ভরতাগুলি সমাধান করার ক্ষেত্রে সমস্যা হয়েছিল (প্রস্তাবিত ব্যবহার করে RootProject) আমি কল করা বস্তুটি উল্লেখ করতে চাই ProjectRef। সুতরাং, যদি গিটের মধ্যে থাকা কোনও লাইব্রেরির উপর নির্ভর করতে হয় তবে আমি নিম্নলিখিত হিসাবে এটি করার পরামর্শ দিচ্ছি:

import sbt.Keys._
import sbt._

object MyBuild extends Build {

  lazy val root = Project("root", file("."))
    .dependsOn(myLibraryinGit)
    .settings(
      ...,
      libraryDependencies ++= Seq(...))

  lazy val myLibraryinGit = ProjectRef(uri("git://git@github.com:user/repo.git#branch"), "repo-name")

}

সূত্র: http://blog.xebia.com/git-subproject-compile-time-d dependferences-in-sbt/


1
গিট ক্লোন ত্রুটির ক্ষেত্রে https uriসংস্করণ দিয়ে চেষ্টা করুন ।
ওয়াল্ডেমার ওয়ারসিস্কি 26'17

6

আমি এসবিটি 0.13+ এর জন্য একটি উত্তর যুক্ত করতে চেয়েছিলাম। আপনার build.sbtপ্রকল্পের মূল ফোল্ডারে এটির মতো কিছু রাখুন (নয় Build.scala):

lazy val root = (project in file(".")).dependsOn(playJongo)

lazy val playJongo = RootProject(uri("https://github.com/bekce/play-jongo.git"))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.