sbt与maven 有什么不同

张映 发表于 2019-08-05

分类目录: hadoop/spark/scala

标签:, ,

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,配置版本和组织

  1. //sbt  
  2. organization := "com.demo"  
  3. name := "myscala"  
  4. version := "0.1"  
  5.   
  6. //maven  
  7. <groupId>com.demo</groupId>  
  8. <artifactId>myscala</artifactId>  
  9. <version>0.1</version>  

6.2,加入源

  1. //sbt  
  2. resolvers += "Scala-Tools Maven2 Repository" at "http://scala-tools.org/repo-releases"  
  3.   
  4. //本地maven源  
  5. resolvers += "Local Maven Repository" at "file://"+Path.userHome.absolutePath+"/.m2/repository"  
  6.   
  7. //maven  
  8. <repositories>  
  9.     <repository>  
  10.         <id>scala-tools.org</id>  
  11.         <name>Scala-Tools Maven2 Repository</name>  
  12.         <url>http://scala-tools.org/repo-releases</url>  
  13.     </repository>  
  14. </repositories>  

6.3,构建源

  1. //sbt  
  2. scalaSource in Compile := baseDirectory.value / "src/main/scala"  
  3. unmanagedResourceDirectories in Compile += baseDirectory.value / "src/main/resources"  
  4. unmanagedResourceDirectories in Compile += baseDirectory.value / "src/main/conf"  
  5.   
  6. //maven  
  7. <sourceDirectory>src/main/scala</sourceDirectory>  
  8. <resources>  
  9.     <resource>  
  10.         <directory>src/main/resource</directory>  
  11.     </resource>  
  12.     <resource>  
  13.         <directory>src/main/conf</directory>  
  14.     </resource>  
  15. </resources>  

6.4,加载包,并排除不需要的包

  1. //sbt  
  2. //方法1  
  3. libraryDependencies += "org.apache.spark" % "spark-core_2.11" % "2.3.0" exclude("javax.servlet")  
  4. //方法2  
  5. libraryDependencies +=  
  6.  "org.apache.spark" % "spark-core_2.11" % "2.3.0" excludeAll(  
  7.  ExclusionRule(organization = "javax.servlet")  
  8.  )  
  9.   
  10. //maven  
  11. <dependency>  
  12.     <groupId>org.apache.spark</groupId>  
  13.     <artifactId>spark-core_2.11</artifactId>  
  14.     <version>2.3.0</version>  
  15.     <exclusions>  
  16.         <exclusion>  
  17.              <groupId>javax.servlet</groupId>  
  18.              <artifactId>*</artifactId>  
  19.         </exclusion>  
  20.      </exclusions>  
  21. </dependency>  

6.5,打包

  1. //sbt  
  2. isSnapshot := true  
  3. publishTo := {  
  4.  val nexus = "http://artifactory.xxxxxx.com/artifactory/"  
  5.  if (isSnapshot.value)  
  6.  Some("snapshots" at nexus + "snapshots")  
  7.  else  
  8.  Some("releases" at nexus + "releases")  
  9. }  
  10.   
  11. credentials += Credentials(Path.userHome / ".ivy2" / ".credentials")  
  12.   
  13. //maven  
  14. <distributionManagement>  
  15.     <repository>  
  16.         <id>artifactory</id>  
  17.         <name>xxxxxx</name>  
  18.         <url>http://artifactory.xxxxxx.com/artifactory/xxxxxx/</url>  
  19.     </repository>  
  20.     <snapshotRepository>  
  21.         <id>artifactory</id>  
  22.         <name>xxxxxx</name>  
  23.         <url>http://artifactory.xxxxxxx.com/artifactory/xxxxxxx/</url>  
  24.     </snapshotRepository>  
  25. </distributionManagement>  

6.6,添加包依赖

  1. //sbt  
  2. //单个  
  3. libraryDependencies += "org.apache.spark" % "spark-core_2.11" % "2.3.0" % "test"  
  4. //多个  
  5. libraryDependencies ++= Seq(  
  6.     "org.apache.spark" % "spark-core_2.11" % "2.3.0",  
  7.     "org.apache.spark" % "spark-sql_2.11" % "2.3.0",  
  8.     "com.alibaba" % "fastjson" % "1.2.49"  
  9. )  
  10.   
  11. //maven  
  12. <dependency>  
  13.     <groupId>org.apache.spark</groupId>  
  14.     <artifactId>spark-core_2.11</artifactId>  
  15.     <version>2.3.0</version>  
  16.     <scope>test</scope>  
  17. </dependency>  


转载请注明
作者:海底苍鹰
地址:http://blog.51yip.com/hadoop/2167.html