web-dev-qa-db-ja.com

jarをローカルリポジトリに公開する方法は?

リポジトリーで使用できないライブラリーをjar(sbtプロジェクトではなく、ソースコードなし、jarファイルのみ)にコンパイルしています。

libraryDependencies += "org.xxx" % "xxx" % "1.0"表記を使用して依存関係を追加できるように、jarをローカルに公開する方法はありますか? (ファイルをlibフォルダーにコピーしてプロジェクトに追加する方法は既に知っています。)

57
Jeff Axelrod

** publishLocal **アクションは、ローカルのIvyリポジトリにプロジェクトを公開するために使用されます。デフォルトでは、このローカルリポジトリは$ {user.home} /。ivy2/localにあります。その後、同じマシン上の他のプロジェクトからこのプロジェクトを使用できます source

編集:ごめんなさい、あなたの質問を読み違えました。 jarまたはソースをローカルのivyリポジトリに公開する です。

53
Renaud

tl; dr私はそれをsbtの機能ではなくトリックと呼んでいます。あなたは警告されました。

公開するfile.jarがあるとしましょう。 anyビルドツールの場合と同様に、sbtを含め、最終的にアーティファクト(ほとんどの場合jarファイル)を作成するタスクを実行します。プロジェクト。

プロジェクトは、アーティファクトの座標を設定します

トリックは、sbtが環境のセットアップに必要なものを活用することです環境(=座標)jarをパブリッシュするには(そうでなければ、コマンドラインでそれらを指定する必要がありますが、非常に使いやすいかどうかはわかりません).

必要な設定-organizationnameversion、場合によってはscalaVersionを使用してbuild.sbtを作成し、jarファイルがある場所に保存します。

organization := "org.abc"

name := "my-own-publish-jar"

version := "1.0.0"

scalaVersion := "2.11.3"

packageBin in Compile := file(s"${name.value}_${scalaBinaryVersion.value}.jar")

お気付きかもしれませんが、ビルドによってcompile:packageタスクがjarファイルを指すように変更されます。

それでおしまい。

sbt publishLocalを実行すると、jarファイルはIvy2ローカルリポジトリ、つまり~/.ivy2/local/org.abc/my-own-publish-jar_2.11/1.0.0/jars/my-own-publish-jar_2.11.jarにあるはずです。

protipコマンドラインで指定された座標を使用してプラグインを作成することは、非常に簡単になりました。

31
Jacek Laskowski

wetElephant.jarおよびwetElephant-javadoc.jarファイルがあり、ローカルリポジトリに公開し、libraryDependencies sbttaskKey

必要なことは次のとおりです。

  1. ライブラリ(wetElephant.jarおよびwetElephant-javadoc.jar)をmodules\wetElephantに入れます
  2. build.sbtファイル(またはBuild.scalaファイルでプロジェクトを定義します)

    lazy val stolenLib = project
      .in(file("modules/wetElephant"))
      .settings(
        organization              := "com.stolenLibs",
        name                      := "wetElephant",
        version                   := "0.1-IDonKnow",
        crossPaths                := false,  //don't add scala version to this artifacts in repo
        publishMavenStyle         := true,
        autoScalaLibrary          := false,  //don't attach scala libs as dependencies
        description               := "project for publishing dependency to maven repo, use 'sbt publishLocal' to install it",
        packageBin in Compile     := baseDirectory.value / s"${name.value}.jar",
        packageDoc in Compile     := baseDirectory.value / s"${name.value}-javadoc.jar"
      )
    
  3. Sbt/activatorからpublishLocalタスクを呼び出します(アクティベーターから実行し、proejct名をプレフィックスとして付けました):

    ./activator wetElephant/publishLocal                   
    

...出力を読んで、何がどこで発行されたかを確認します。

    /cygdrive/d/devstation-workspace/projects/m4l-patches 1
      [info] Loading project definition from D:\devstation-workspace\projects\m4l-patches\project
      [info] Set current project to m4l-patches (in build file:/D:/devstation-workspace/projects/m4l-patches/)
      [info] Updating {file:/D:/devstation-workspace/projects/m4l-patches/}wetElephant...
    [info] Packaging D:\devstation-workspace\projects\m4l-patches\modules\wetElephant\target\wetelephant-0.1-IDonKnow-sources.jar ...
    [info] Done packaging.
    [info] Wrote D:\devstation-workspace\projects\m4l-patches\modules\wetElephant\target\wetelephant-0.1-IDonKnow.pom
      [info] Resolving org.fusesource.jansi#jansi;1.4 ...4 ....
    [info] Done updating.
    [info] :: delivering :: com.stolenLibs#wetelephant;0.1-IDonKnow :: 0.1-IDonKnow :: release :: Sun Dec 20 20:09:24 CET 2015
      [info]  delivering ivy file to D:\devstation-workspace\projects\m4l-patches\modules\wetElephant\target\ivy-0.1-IDonKnow.xml
      [info]  published wetelephant to C:\Users\pawell\.ivy2\local\com.stolenLibs\wetelephant\0.1-IDonKnow\poms\wetelephant.pom
      [info]  published wetelephant to C:\Users\pawell\.ivy2\local\com.stolenLibs\wetelephant\0.1-IDonKnow\jars\wetelephant.jar
      [info]  published wetelephant to C:\Users\pawell\.ivy2\local\com.stolenLibs\wetelephant\0.1-IDonKnow\srcs\wetelephant-sources.jar
      [info]  published wetelephant to C:\Users\pawell\.ivy2\local\com.stolenLibs\wetelephant\0.1-IDonKnow\docs\wetelephant-javadoc.jar
      [info]  published ivy to C:\Users\pawell\.ivy2\local\com.stolenLibs\wetelephant\0.1-IDonKnow\ivys\ivy.xml
      [success] Total time: 1 s, completed 2015-12-20 20:09:24
  1. オプションで、これらのライブラリを別のプロジェクトで使用します

    libraryDependencies += "com.stolenLibs" % "wetElephant" % "0.1-IDontKnow"
    

免責事項:ソースを公開しない方法はわかりません...

5

ここに、数か月前にsbtアーティファクトをMavenリポジトリー(ローカルおよびリモート)にプッシュするためにフォローしたブログ投稿があります。

http://brizzled.clapper.org/id/100/

2
lobster1234