sbt笔记-Detailed Topics-Publishing

正好想把spray.io的源码发布到本地仓库Nexus,于是顺便看了一下官方文档

发布

本页介绍了如何发布你的应用。发布包括上传一个描述符,诸如Ivy文件或Maven POM,以及制品(artifacts),诸如一个Jar或War,到一个仓库,以便其他的项目可以把你的项目指定为依赖。

publish功能用于发布你的项目到一个远程仓库。为了使用发布,你需要指定要发布的仓库和要用的认证信息。一旦设置了这些,你就可以运行publish了。

publishLocal功能用于发布你的项目到本地Ivy仓库。然后你就可以在同一台机器上的其他项目里使用这个项目。

定义仓库

指定仓库,需要指定一个仓库到publishTo,并有选择地设置一个发布风格。例如,上传到Nexus:

publishTo := Some("Sonatype Snapshots Nexus" at "https://oss.sonatype.org/content/repositories/snapshots")

发布到本地仓库:

publishTo := Some(Resolver.file("file", new File( "path/to/my/maven-repo/releases" )) )

发布到用户的本地maven仓库:

publishTo := Some(Resolver.file("file", new File(Path.userHome.absolutePath+"/.m2/repository")))

如果你使用Maven仓库,你也要依据你的制品(artifacts)选择正确的仓库:SNAPSHOT版本放到/snapshot仓库,其他版本放到/releases仓库。这个选择可以通过version SettingKey来实现:

publishTo := {   val nexus = "https://oss.sonatype.org/" if (version.value.trim.endsWith("SNAPSHOT"))  Some("snapshots" at nexus + "content/repositories/snapshots")  else  Some("releases" at nexus + "service/local/staging/deploy/maven2") }

认证信息

有两种方式为一个仓库指定认证信息。第一种是通过内敛方式来指定:

credentials += Credentials("Sonatype Nexus Repository Manager", "nexus.scala-tools.org", "admin", "admin123")

译注:发布到Nexus仓库的话,第二个参数要设置为Nexus的域名或IP,因为我要发布到本地,所以值应为"127.0.0.1";
第一个参数是realm,不知道干嘛用的,反正文档里给提供的这个值好用;
后两个参数则为Nexus的用户名和密码,默认为admin和admin123;
另外我在Build.scala中使用上面方式没起作用,需要如下写法才有用:

Credentials.add("Sonatype Nexus Repository Manager", "127.0.0.1", "admin", "admin123")


第二种,也是更好的方式是从文件加载他们,例如:

credentials += Credentials(Path.userHome / ".ivy2" / ".credentials")

译注:同样的,这里也要写成

Credentials.add(Path.userHome / ".ivy2" / ".credentials", null)
第一个参数是认证文件路径,类型为File;第二个参数是log对象,目前还不知道要怎么用。


认证文件是一个资源文件,包含的键有realm,host,user和password。例如:

realm=Sonatype Nexus Repository Manager
host=nexus.scala-tools.org
user=admin
password=admin123

Cross发布

为了支持多个不相容的Scala版本,启用cross构建并执行+publish(do + publish)(见Cross-building)。阅读Resolvers来了解其他支持的仓库类型。

已发布的制品

默认情况下,主二进制jar,源码jar以及API文档jar会被发布。你可以声明其他类型的制品来发布,并且禁用或修改默认的制品。详细内容见Artifacts

修改生成的POM

当publishMavenStyle为true,通过makePom功能会生成一个POM,并代替Ivy文件发布到仓库。这个POM文件可以通过 改变一些设置来改变。设置pomExtra来提供XML(scala.xml.NodeSeq)来直接插入到生产的pom。例如:

pomExtra := 
    <licenses>
        <license>
            <name>Apache 2</name>
            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
            <distribution>repo</distribution>
        </license>
    </licenses>

makePom将你声明的Maven风格仓库添加到POM。你可以通过修改pomRepositoryFilter来过滤它们,默认会排除本地仓库。替换成只包含本地仓库:

pomIncludeRepository := { (repo: MavenRepository) => repo.root.startsWith("file:") }

另外有一个pomPostProcess设置,它用于在写入前操作最终的XML。它的类型是Node => Node。

pomPostProcess := { (node: Node) => ... }

发布到本地

publishLocal命令会发布到本地Ivy仓库。默认在${user.home}/.ivy2/local文件夹。之后,同一台机器上的其他项目可以把这个项目列为以来。例如,如果你正在发布的SBT项目配置了如下参数:

name := 'My Project'
organization := 'org.me'
version := '0.1-SNAPSHOT'

之后另一个项目可以依赖它:

libraryDependencies += "org.me" %% "my-project" % "0.1-SNAPSHOT"

你选择的版本号必须以SNAPSHOT结尾,或者你必须每次在发布的时候更改版本号。Ivy维护一个缓存,并且它在缓存中保存偶数本地项目(it stores even local projects in that cache)。如果Ivy已经缓存了一个版本,它将不再为更新而检查本地仓库,除非版本号匹配一个changing pattern,并且SNAPSHOT就是这样一个模式。

转载于:https://my.oschina.net/u/580483/blog/120449

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值