2017-06-06 4 views
1

SBTでScalaプロジェクトを実行していて、実行時にgitからフェッチしたいビルド時にクラスパス。これらのXMLは、制御できない外部のgitリポジトリから来ているので、2つのreposをマージすることはできません。SBTを使用して、外部のgitリポジトリからXMLリソース(実行時に必要)を管理します。

unmanagedResourceDirectoriesmanagedResoureDirectoriesを追加することができます(その違いはわかりません)。これにより、SBTにクラスパスにディレクトリを追加するように指示できますが、ディレクトリからのディレクトリの取得方法がわかりませんディスク上の実際のディレクトリではなくgit repoです。

答えて

1

JGit libraryを使用して、ローカルにレポをクローンし、archiveコマンドを使用してレポからファイルをコピーすることができます。例として、sbt-hacklingプラグインがこれを実装する方法を参照してください。

プラットフォーム独立性が必要ない場合は、コマンドラインgitコマンドを呼び出して、clone/fetchと依存関係を更新し、archiveを抽出してファイルを抽出します。

コードの一部をコピー、ローカルリポジトリのうち一部のパス:ローカルリポジトリのクローンをコードする

// needed for installSource 
// maybe implement some archiver to go directly to files? 
org.eclipse.jgit.archive.ArchiveFormats.registerAll() 

def installSource(cachedRepo: Git, paths: Seq[String], revision: ObjectId, target: File): Set[File] = 
    IO.withTemporaryFile(target.getName, ".zip") { tmp => 
    val out = new BufferedOutputStream(new FileOutputStream(tmp)) 

    cachedRepo 
     .archive() 
     .setFormat("zip") 
     .setTree(revision) 
     .setPaths(paths :_*) 
     .setOutputStream(out) 
     .call() 

    IO.unzip(tmp, target) 
    } 

パート:

def downloadGitRepo(local: File)(repo: URI): File = { 

    val clone = Git 
     .cloneRepository() 
     .setURI(repo.toString) 
     .setDirectory(local) 
     .setBare(true) 
     .call() 

    assert(local.exists()) 

    local 
} 
+0

おかげで答えをたくさん!私は今日これを試してみましょう。 –

関連する問題