12

SBT プロジェクトのいくつかを個人の Web サーバーで公開しようとしています。私の知る限り、通常、SBT プロジェクトは、プロジェクト定義を含む POM.xml を含む Maven ディレクトリとしてエクスポートします。

Brian Clapper が指摘したように、いくつかの構成ファイルを作成し、sbt publish. 彼のチュートリアルでは、リポジトリは FTP 経由で転送されます。

Maven リポジトリをサーバーに手動でプッシュして、より詳細に制御したいと考えています。これを達成する方法を教えてください。

4

2 に答える 2

20

これを行う方法を理解しました。このソリューションは、Maven と互換性のあるローカルの Ivy リポジトリを作成します。

に次の値を設定する必要がありますbuild.sbt

name := "project-name"

organization := "org.example"

version := "0.0.0"

scalaVersion := "2.9.2"

publishTo := Some(Resolver.file("file", new File("/path/to/your/releases"))

その後、リリースを公開できます

sbt publish

これにより、次の行のようなものが出力されます

[info] Set current project to project-name (in build file:/path/to/your/project/)
[info] Updating {file:/path/to/your/project/}default-2e51ea...
[info] Packaging /path/to/your/project/target/scala-2.9.2/project-name_2.9.2-0.0.0-S
NAPSHOT-sources.jar ...
[info] Resolving org.scala-lang#scala-library;2.9.2 ...
[info] Done packaging.
[info] Done updating.
[info] :: delivering :: org.example#project-name_2.9.2;0.0.0 :: 0.0.0 :: release :: Tue Jul 24 15:41:04 CEST 2012
[info]  delivering ivy file to /path/to/your/project/target/scala-2.9.2/ivy-0.0.0.xml
[info] Wrote /path/to/your/project/target/scala-2.9.2/project-name_2.9.2-0.0.0.pom
[info] Packaging /path/to/your/project/target/scala-2.9.2/project-name_2.9.2-0.0.0.jar ...
[info] Done packaging.
[info]  published project-name_2.9.2 to /path/to/your/releases/org/example/project-name_2.9.2/0.0.0-SNAPSHOT/project-name_2.9.2-0.0.0.pom
[info]  published project-name_2.9.2 to /path/to/your/releases/org/example/project-name_2.9.2/0.0.0-SNAPSHOT/project-name_2.9.2-0.0.0.jar
[info]  published project-name_2.9.2 to /path/to/your/releases/org/example/project-name_2.9.2/0.0.0-SNAPSHOT/project-name_2.9.2-0.0.0-sources.jar
[info]  published project-name_2.9.2 to /path/to/your/releases/org/example/project-name_2.9.2/0.0.0-SNAPSHOT/project-name_2.9.2-0.0.0-javadoc.jar
[success] Total time: 1 s, completed 24.07.2012 15:41:05

生成されたファイルを任意の Web サーバー (例: http://repo.example.org/ ) に置き、別のプロジェクトのビルド スクリプトで次の行を追加して使用できますbuild.sbt

resolvers += "Personal repository" at "http://repo.example.org/"

libraryDependencies += "org.example" % "project-name" % "0.0.0"

詳細については、SBT: Getting Started Library DependenciesおよびSBT: Publishingを参照してください。

于 2012-07-24T14:14:04.737 に答える
8

sbtから、使用できます

project myproject
[myproject] $ publish-local

これは、ローカルの ivy ディレクトリ (通常は~/.ivy2/local) に公開されます。

出力には、すべてのファイルのパスが表示されます。

[info] Done packaging.
[info] published myproject_2.9.1 to .../ivy2/...myproject.../poms/myproject_2.9.1.pom
[info] published myproject_2.9.1 to .../ivy2/...myproject.../jars/myproject_2.9.1.jar
[info] published myproject_2.9.1 to .../ivy2/...myproject.../srcs/myproject_2.9.1-sources.jar
[info] published myproject_2.9.1 to .../ivy2/...myproject.../docs/myproject_2.9.1-javadoc.jar
[info] published ivy to .../ivy2/...myproject.../ivys/ivy.xml

次に、それらのファイルを取得して、ftp サーバーにアップロードできます。

ただし、リンクされたブログ投稿で説明されているアプローチをお勧めします。少なくともそれが私たちのやり方です。資格情報の保存に関するちょっとしたメモ。次の sbt 設定を使用します。

val credentials = Credentials(Path.userHome / ".ivy2" / ".my-credentials")

資格情報ファイルは次のようになります。

realm=Sonatype Nexus Repository Manager
host=nexus.example.com
user=deployment
password=pass

クレデンシャルは、Nexus Web インターフェイスへのログインに使用するものと同じです。

于 2012-07-15T15:00:42.273 に答える