sbt与maven简单对比

sbt vs maven

  • sbt项目用ivy2,可以使用maven的包
  • sbt可以进行增量编译,这个特性还是非常有吸引力,因为scala的编译速度是堪比c++的
  • sbt提供了一个scala的console,并且导入默认的一些包,非常方便的交互
  • sbt在插件上支持的并不是那么好,很多maven中好用的功能,需要用额外的插件,比如mvn dependency:tree ps:最新版的不需要plugin ,运行sbt test:compile即可,会出现在target/resolution-cache/reports下各种非常详细的报告
sbt与maven常见命令对比
mvnsbt
installpublishLocal
deploypublish
cleanclean
packagepackge
compilecompile
testtest
dependency:treeusing plugin
unsupportconsole
unsupportrun
sbt与maven配置文件对比:

maven利用pom.xml进行项目管理

配置版本,组织:

  • maven
<groupId>com.ximalaya</groupId>
<artifactId>testsbtpublish</artifactId>
<version>1.0-SNAPSHOT</version>
  • sbt
organization := "com.ximalaya"
name := "testsbtpublish"
version := "1.0-SNAPSHOT"
加入额外的源:
  • maven:
    <repositories>
        <repository>
            <id>scala-tools.org</id>
            <name>Scala-Tools Maven2 Repository</name>
            <url>http://scala-tools.org/repo-releases</url>
        </repository>
    </repositories>
  • sbt:
resolvers += "Sonatype OSS Snapshots" at "https://oss.sonatype.org/content/repositories/snapshots"

格式为:

resolvers += name at location

如果需要加入本地的maven库:

resolvers += "Local Maven Repository" at "file://"+Path.userHome.absolutePath+"/.m2/repository"

或者简写为:

resolvers += Resolver.mavenLocal
build source
  • maven:
 <sourceDirectory>src/main/scala</sourceDirectory>
        <resources>
            <resource>
                <directory>src/main/resource</directory>
            </resource>
            <resource>
                <directory>src/main/conf</directory>
            </resource>
        </resources>
  • sbt:
scalaSource in Compile := baseDirectory.value / "src/main/scala"
scalaSource in Test := baseDirectory.value / "src/test"
unmanagedResourceDirectories in Compile += baseDirectory.value / 
"src/main/resources"
导入依赖包,并排除不需要的jar包
  • maven:
<dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.10</artifactId>
            <version>${spark.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>javax.servlet</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
  • sbt:
libraryDependencies ++= Seq(
    "org.apache.spark" % "spark-core_2.11" % "1.5.0"  
    )
"log4j" % "log4j" % "1.2.15" excludeAll(
ExclusionRule(organization = "com.sun.jdmk"),
ExclusionRule(organization = "com.sun.jmx"),
ExclusionRule(organization = "javax.jms")

其中:

def exclude(org: String, name: String) = excludeAll(ExclusionRule(org, name))

发布:

  • maven:
  <distributionManagement>
        <repository>
            <id>artifactory</id>
            <name>xxxxxx</name>
            <url>http://artifactory.xxxxxx.com/artifactory/xxxxxx/</url>
        </repository>
        <snapshotRepository>
            <id>artifactory</id>
            <name>xxxxxx</name>
            <url>http://artifactory.xxxxxxx.com/artifactory/xxxxxxx/</url>
        </snapshotRepository>
    </distributionManagement>
  • sbt:
publishTo := {
  val nexus = "http://artifactory.xxxxxx.com/artifactory/"
  if (isSnapshot.value)
    Some("snapshots" at nexus + "snapshots")
  else
    Some("releases"  at nexus + "releases")
}
//授权
credentials += Credentials(Path.userHome / ".ivy2" / ".credentials")

其中授权文件为:

realm=Artifactory Realm
host=host
user=userName
password=passWord
测试:
  • maven:
<dependency>
    <groupId>org.scalatest</groupId>
    <artifactId>scalatest_2.11</artifactId>
    <version>3.0.0-M16-SNAP3</version>
    <scope>test</scope>
</dependency>
  • sbt:
libraryDependencies += "org.scalatest" % "scalatest_2.11" % "3.0.0-M16-SNAP3" % "test"
sbt plugins

全局plugins:~/.sbt/0.13/plugins/plugin.sbt
树形:addSbtPlugin(“net.virtual-void” % “sbt-dependency-graph” % “0.8.2”)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值