sbt功能很强大,也很灵活,但是灵活的代价就是比较复杂。
1,sbt下载的包默认在~/.ivy2/目录下,maven下的包在~/.m2下面。sbt可以使用maven的包。
2,sbt可以增量编译,maven不行
3,sbt直接运行,会进入命令行模式下。交互方式,还是比较方便的
4,sbt产生多版本包时,打包会比较麻烦,需要解决冲突。而maven不需要,根据配置的版本号加载包
5,sbt命令根maven命令,基本上差不多,但有一些不同。例如:mvn install,sbt publishLocal
6,加载包的配置不同,本文重点
6.1,配置版本和组织
//sbt organization := "com.demo" name := "myscala" version := "0.1" //maven <groupId>com.demo</groupId> <artifactId>myscala</artifactId> <version>0.1</version>
6.2,加入源
//sbt
resolvers += "Scala-Tools Maven2 Repository" at "http://scala-tools.org/repo-releases"
//本地maven源
resolvers += "Local Maven Repository" at "file://"+Path.userHome.absolutePath+"/.m2/repository"
//maven
<repositories>
<repository>
<id>scala-tools.org</id>
<name>Scala-Tools Maven2 Repository</name>
<url>http://scala-tools.org/repo-releases</url>
</repository>
</repositories>
6.3,构建源
//sbt
scalaSource in Compile := baseDirectory.value / "src/main/scala"
unmanagedResourceDirectories in Compile += baseDirectory.value / "src/main/resources"
unmanagedResourceDirectories in Compile += baseDirectory.value / "src/main/conf"
//maven
<sourceDirectory>src/main/scala</sourceDirectory>
<resources>
<resource>
<directory>src/main/resource</directory>
</resource>
<resource>
<directory>src/main/conf</directory>
</resource>
</resources>
6.4,加载包,并排除不需要的包
//sbt
//方法1
libraryDependencies += "org.apache.spark" % "spark-core_2.11" % "2.3.0" exclude("javax.servlet")
//方法2
libraryDependencies +=
"org.apache.spark" % "spark-core_2.11" % "2.3.0" excludeAll(
ExclusionRule(organization = "javax.servlet")
)
//maven
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.3.0</version>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
6.5,打包
//sbt
isSnapshot := true
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")
//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>
6.6,添加包依赖
//sbt
//单个
libraryDependencies += "org.apache.spark" % "spark-core_2.11" % "2.3.0" % "test"
//多个
libraryDependencies ++= Seq(
"org.apache.spark" % "spark-core_2.11" % "2.3.0",
"org.apache.spark" % "spark-sql_2.11" % "2.3.0",
"com.alibaba" % "fastjson" % "1.2.49"
)
//maven
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.3.0</version>
<scope>test</scope>
</dependency>