加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 具有来自具有sbt-assembly的单个项目的不同外部依赖关

发布时间:2020-12-16 09:43:52 所属栏目:安全 来源:网络整理
导读:我有一个使用build.scala文件的sbt构建的单个scala项目。我可以使用sbt-assembly从这个项目生成一个可执行的jar文件,没有问题。现在我想生成多个可执行的jar文件,其中每个文件包含一组通用的内部和外部基本依赖关系以及不同的外部依赖关系。 这是否可能与
我有一个使用build.scala文件的sbt构建的单个scala项目。我可以使用sbt-assembly从这个项目生成一个可执行的jar文件,没有问题。现在我想生成多个可执行的jar文件,其中每个文件包含一组通用的内部和外部基本依赖关系以及不同的外部依赖关系。

这是否可能与当前版本的sbt-assembly?在maven中,这是很容易的,因为可以在pom中定义多个配置文件,每个配置文件都生成一个单独的jar,但是在sbt-assembly中,您可以将程序集设置传递到项目中,而且我还没有想到要修改设置以生成多个jar文件。

解决方法

Maven配置文件将sbt / Ivy作为配置文件进行翻译。您可以在配置中定义设置,并使sbt-assembly生成两个jar。
您可以通过添加%“config”将libraryDependency添加到特定配置。但是,这需要项目预先了解配置。

在build.sbt(需要sbt 0.13.0或以上):

import AssemblyKeys._

val Dispatch10 = config("dispatch10") extend(Compile)
val TestDispatch10 = config("testdispatch10") extend(Test)
val Dispatch11 = config("dispatch11") extend(Compile)
val TestDispatch11 = config("testdispatch11") extend(Test)

val root = project.in(file(".")).
  configs(Dispatch10,TestDispatch10,Dispatch11,TestDispatch11).
  settings( 
    name := "helloworld",organization := "com.eed3si9n",scalaVersion := "2.10.2",compile in Test := inc.Analysis.Empty,compile in Compile := inc.Analysis.Empty,libraryDependencies ++= Seq(
      "net.databinder.dispatch" %% "dispatch-core" % "0.10.0" % "dispatch10,testdispatch10","net.databinder.dispatch" %% "dispatch-core" % "0.11.0" % "dispatch11,testdispatch11","org.specs2" %% "specs2" % "2.2" % "test","com.github.scopt" %% "scopt" % "3.0.0"
    )
  ).
  settings(inConfig(Dispatch10)(Classpaths.configSettings ++ Defaults.configTasks ++ baseAssemblySettings ++ Seq(
    test := (test in TestDispatch10).value,test in assembly := test.value,assemblyDirectory in assembly := cacheDirectory.value / "assembly-dispatch10",jarName in assembly := name.value + "-assembly-dispatch10_" + version.value + ".jar"
  )): _*).
  settings(inConfig(TestDispatch10)(Classpaths.configSettings ++ Defaults.configTasks ++ Defaults.testTasks ++ Seq(
    internalDependencyClasspath := Seq((classDirectory in Dispatch10).value).classpath
  )): _*).
  settings(inConfig(Dispatch11)(Classpaths.configSettings ++ Defaults.configTasks ++ baseAssemblySettings ++ Seq(
    test := (test in TestDispatch11).value,assemblyDirectory in assembly := cacheDirectory.value / "assembly-dispatch11",jarName in assembly := name.value + "-assembly-dispatch11_" + version.value + ".jar"
  )): _*).
  settings(inConfig(TestDispatch11)(Classpaths.configSettings ++ Defaults.configTasks ++ Defaults.testTasks ++ Seq(
    internalDependencyClasspath := Seq((classDirectory in Dispatch11).value).classpath
  )): _*)

要在配置中运行程序集任务,您可以这样说:

> dispatch11:assembly
[info] HelloWorldSpec
[info] 
[info] The 'Hello world' string should
[info] + contain 11 characters
[info] 
[info] Total for specification HelloWorldSpec
[info] Finished in 17 ms
[info] 1 examples,0 failure,0 error
[info] Passed: Total 1,Failed 0,Errors 0,Passed 4
[info] Including: scopt_2.10-3.0.0.jar
[info] Including: slf4j-api-1.6.2.jar
[info] Including: netty-3.6.3.Final.jar
[info] Including: scala-library.jar
[info] Including: async-http-client-1.7.16.jar
[info] Including: dispatch-core_2.10-0.11.0.jar
[warn] Merging 'META-INF/NOTICE.txt' with strategy 'rename'
[warn] Merging 'META-INF/license' with strategy 'rename'
[warn] Merging 'META-INF/LICENSE.txt' with strategy 'rename'
[warn] Merging 'META-INF/MANIFEST.MF' with strategy 'discard'
[warn] Strategy 'discard' was applied to a file
[warn] Strategy 'rename' was applied to 3 files
[info] Checking every *.class/*.jar file's SHA-1.
[info] SHA-1: xxxxxxxxxxxx
[info] Packaging /Users/foo/helloworld/target/scala-2.10/helloworld-assembly-dispatch11_0.1-SNAPSHOT.jar ...
[info] Done packaging.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读