「sbt编译java」sbw自动编译

博主:adminadmin 2022-11-26 02:28:07 224

今天给各位分享sbt编译java的知识,其中也会对sbw自动编译进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

sbt编译时怎么匹配scala版本

build.sbt中写入:

scalaVersion := "2.10.5"

就会使用对应的版本的库进行编译

如何配置sbt的build.sbt使得编译时将依赖包也打包进去

首先问题解决了,就是sbt-assembly插件的配置问题。这个文档自己前两次读表示看不懂意思。过2天又仔细看了一遍大致明白了,敢动手操作了。

assembly插件的目的是:

The goal is simple: Create a fat JAR of your project with all of its dependencies.

即将项目依赖的大文件也打包到生成的jar中。我的报错Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/streaming/kafka/KafkaUtils$就是因为包含KafkaUtil的jar包没打包到jar中。

配置使用插件

下面是我的scala项目目录结构:

.

├── assembly.sbt

├── build.sbt

├── project

├── README.md

├── run-assembly.sh

├── run.sh

├── src

└── target

插件的配置取决于sbt的版本,详情见这里

我的是sbt 0.13.8,所以在project/assembly.sbt添加(assembly.sbt)要自己创建:

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.0")

配置assembly的参数

参数在项目根目录下新建assembly.sbt。

直接引入插件就可以用

sbt assembly

编译了,但是由于我的sbt下载了大量的依赖包,在编译的时候遇到了编译包冲突的问题。这个时候需要配置Merge Strategy(合并策略)

apache kafka源码怎么编译

Kafka is a distributed, partitioned, replicated commit log service. It provides the functionality of a messaging system, but with a unique design.(Kafka是一个分布式的、可分区的(partitioned)、基于备份的(replicated)和commit-log存储的服务.。它提供了类似于messaging system的特性,但是在设计实现上完全不同)。kafka是一种高吞吐量的分布式发布订阅消息系统,它有如下特性:

(1)、通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。

(2)、高吞吐量:即使是非常普通的硬件kafka也可以支持每秒数十万的消息。

(3)、支持通过kafka服务器和消费机集群来分区消息。

(4)、支持Hadoop并行数据加载。

一、用Kafka里面自带的脚本进行编译

下载好了Kafka源码,里面自带了一个gradlew的脚本,我们可以利用这个编译Kafka源码:

1 # wget

2 # tar -zxf kafka-0.8.1.1-src.tgz

3 # cd kafka-0.8.1.1-src

4 # ./gradlew releaseTarGz

运行上面的命令进行编译将会出现以下的异常信息:

01 :core:signArchives FAILED

02

03 FAILURE: Build failed with an exception.

04

05 * What went wrong:

06 Execution failed for task ':core:signArchives'.

07 Cannot perform signing task ':core:signArchives' because it

08 has no configured signatory

09

10 * Try:

11 Run with --stacktrace option to get the stack trace. Run with

12 --info or --debug option to get more log output.

13

14 BUILD FAILED

这是一个bug(),可以用下面的命令进行编译

1 ./gradlew releaseTarGzAll -x signArchives

这时候将会编译成功(在编译的过程中将会出现很多的)。在编译的过程中,我们也可以指定对应的Scala版本进行编译:

1 ./gradlew -PscalaVersion=2.10.3 releaseTarGz -x signArchives

编译完之后将会在core/build/distributions/里面生成kafka_2.10-0.8.1.1.tgz文件,这个和从网上下载的一样,可以直接用。

二、利用sbt进行编译

我们同样可以用sbt来编译Kafka,步骤如下:

01 # git clone

02 # cd kafka

03 # git checkout -b 0.8 remotes/origin/0.8

04 # ./sbt update

05 [info] [SUCCESSFUL ] org.eclipse.jdt#core;3.1.1!core.jar (2243ms)

06 [info] downloading ...

07 [info] [SUCCESSFUL ] ant#ant;1.6.5!ant.jar (1150ms)

08 [info] Done updating.

09 [info] Resolving org.apache.hadoop#hadoop-core;0.20.2 ...

10 [info] Done updating.

11 [info] Resolving com.yammer.metrics#metrics-annotation;2.2.0 ...

12 [info] Done updating.

13 [info] Resolving com.yammer.metrics#metrics-annotation;2.2.0 ...

14 [info] Done updating.

15 [success] Total time: 168 s, completed Jun 18, 2014 6:51:38 PM

16

17 # ./sbt package

18 [info] Set current project to Kafka (in build file:/export1/spark/kafka/)

19 Getting Scala 2.8.0 ...

20 :: retrieving :: org.scala-sbt#boot-scala

21 confs: [default]

22 3 artifacts copied, 0 already retrieved (14544kB/27ms)

23 [success] Total time: 1 s, completed Jun 18, 2014 6:52:37 PM

对于Kafka 0.8及以上版本还需要运行以下的命令:

01 # ./sbt assembly-package-dependency

02 [info] Loading project definition from /export1/spark/kafka/project

03 [warn] Multiple resolvers having different access mechanism configured with

04 same name 'sbt-plugin-releases'. To avoid conflict, Remove duplicate project

05 resolvers (`resolvers`) or rename publishing resolver (`publishTo`).

06 [info] Set current project to Kafka (in build file:/export1/spark/kafka/)

07 [warn] Credentials file /home/wyp/.m2/.credentials does not exist

08 [info] Including slf4j-api-1.7.2.jar

09 [info] Including metrics-annotation-2.2.0.jar

10 [info] Including scala-compiler.jar

11 [info] Including scala-library.jar

12 [info] Including slf4j-simple-1.6.4.jar

13 [info] Including metrics-core-2.2.0.jar

14 [info] Including snappy-java-1.0.4.1.jar

15 [info] Including zookeeper-3.3.4.jar

16 [info] Including log4j-1.2.15.jar

17 [info] Including zkclient-0.3.jar

18 [info] Including jopt-simple-3.2.jar

19 [warn] Merging 'META-INF/NOTICE' with strategy 'rename'

20 [warn] Merging 'org/xerial/snappy/native/README' with strategy 'rename'

21 [warn] Merging 'META-INF/maven/org.xerial.snappy/snappy-java/LICENSE'

22 with strategy 'rename'

23 [warn] Merging 'LICENSE.txt' with strategy 'rename'

24 [warn] Merging 'META-INF/LICENSE' with strategy 'rename'

25 [warn] Merging 'META-INF/MANIFEST.MF' with strategy 'discard'

26 [warn] Strategy 'discard' was applied to a file

27 [warn] Strategy 'rename' was applied to 5 files

28 [success] Total time: 3 s, completed Jun 18, 2014 6:53:41 PM

当然,我们也可以在sbt里面指定scala的版本:

01 !--

02 User: 过往记忆

03 Date: 14-6-18

04 Time: 20:20

05 bolg:

06 本文地址:

07 过往记忆博客,专注于hadoop、hive、spark、shark、flume的技术博客,大量的干货

08 过往记忆博客微信公共帐号:iteblog_hadoop

09 --

10 sbt "++2.10.3 update"

11 sbt "++2.10.3 package"

12 sbt "++2.10.3 assembly-package-dependency"

scala maven sbt 哪个

SBT是Simple Build Tool的简称,如果读者使用过Maven,那么可以简单将SBT看做是Scala世界的Maven,虽然二者各有优劣,但完成的工作基本是类似的。

虽然Maven同样可以管理Scala项目的依赖并进行构建, 但SBT的某些特性却让人如此着迷,比如:

* 使用Scala作为DSL来定义build文件(one language rules them all);

* 通过触发执行(trigger execution)特性支持持续的编译与测试;

* 增量编译;^[SBT的增量编译支持因为如此优秀,已经剥离为Zinc,可被Eclipse, Maven,Gradle等使用]

* 可以混合构建Java和Scala项目;

* 并行的任务执行;

* 可以重用Maven或者ivy的repository进行依赖管理;

等等这些,都是SBT得以在Scala的世界里广受欢迎的印记。

SBT的发展可以分为两个阶段, 即SBT_0.7.x时代以及SBT_0.10.x以后的时代。

目前来讲, SBT_0.7.x已经很少使用, 大部分公司和项目都已经迁移到0.10.x以后的版本上来,最新的是0.12版本。 0.10.x之后的版本build定义采用了新的Settings系统,与最初0.7.x版本采用纯Scala代码来定义build文件大相径庭,虽然笔者在迁移之前很抵触(因为0.7.x中采用Scala定义build文件的做法可以体现很好的统一性),但还是升级并接纳了0.10.x以后的版本,并且也逐渐意识到, 虽然新的版本初看起来很复杂,但一旦了解了其设计和实现的哲学跟思路,就会明白这种设计可以更便捷的定义build文件。而且可选的build文件方式也同样运行采用Scala代码来定义,即并未放弃统一性的思想。

以上是SBT的简单介绍,如果读者已经急于开始我们的SBT之旅,那么让我们先从SBT的安装和配置开始吧!

## SBT安装和配置

SBT的安装和配置可以采用两种方式,一种是所有平台都通用的安装配置方式,另一种是跟平台相关的安装和配置方式,下面我们分别对两种方式进行详细介绍。

### 所有平台通用的安装配置方式

所有平台通用的安装和配置方式只需要两步:

1. 下载sbt boot launcher

- 本书采用最新的sbt0.12,其下载地址为;;

2. 创建sbt启动脚本(启动脚本是平台相关的)

- 如果是Linux/Unit系统,创建名称为sbt的脚本,并赋予其执行权限,并将其加到PATH路径中; sbt脚本内容类似于

``java -Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=384M -jar `dirname $0`/sbt-launch.jar "$@"``, 可以根据情况调整合适的java进程启动参数;

- 如果是Windows系统,则创建sbt.bat命令行脚本,同样将其添加到PATH路径中。 脚本内容类似于``set SCRIPT_DIR=%~dp0 \n

java -Xmx512M -jar "%SCRIPT_DIR%sbt-launch.jar" %*``

以上两步即可完成sbt的安装和配置。

### 平台相关的安装配置方式

笔者使用的是Mac系统,安装sbt只需要执行``brew install sbt``即可(因为我已经安装有homebrew这个包管理器),使用macport同样可以很简单的安装sbt - ``sudo port install sbt``;

sbt编译java的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于sbw自动编译、sbt编译java的信息别忘了在本站进行查找喔。

The End

发布于:2022-11-26,除非注明,否则均为首码项目网原创文章,转载请注明出处。