具有sbt-assembly的单个项目中具有不同外部依赖项的多个可执行jar文件

奥斯卡·塔克斯特罗姆(OscarTäckström)

我有一个使用build.scala文件使用sbt构建的scala项目。我可以使用sbt-assembly从该项目中生成单个可执行jar文件,而不会出现问题。现在,我想生成多个可执行的jar文件,其中每个文件都包含一组通用的内部和外部基本依赖关系以及不同的外部依赖关系

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

横田Eugene

Maven配置文件的概念将sbt / Ivy转换为配置。您可以在配置中定义设置,并使sbt-assembly生成两个jar。您可以通过添加将libraryDependency添加到特定配置% "config"但是,这需要项目预先知道配置。

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,
    test in assembly := test.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.

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用sbt和sbt-release发布胖JAR(具有依赖性的JAR)?

来自分类Dev

sbt多项目构建,项目之间具有测试依赖性?

来自分类Dev

具有多个Lib文件夹的Gradle多项目依赖项

来自分类Dev

为什么Maven Assembly Plugin不在具有依赖项的jar中包含我的项目文件?

来自分类Dev

使用maven的具有依赖项的可执行jar

来自分类Dev

Maven打包项目作为具有依赖关系的可执行JAR

来自分类Dev

如何在Windows上使用命令行执行具有外部依赖项的jar文件?

来自分类Dev

单个文件具有多个依赖项的makefile

来自分类Dev

如何使SBT子项目具有多个Scala版本?

来自分类Dev

SBT Scala跨版本,具有聚合和依赖关系

来自分类Dev

Eclipse:如何使用带有外部项目依赖项的ant构建可执行jar?

来自分类Dev

如何在具有多个电源的单个模块项目中设置sbt-native-packager

来自分类Dev

Android Studio-在单个项目中具有共同依赖项的多个android应用

来自分类Dev

SBT InputKey具有类似属性的参数

来自分类Dev

对具有子/外部项目/依赖项的项目使用cmake

来自分类Dev

具有多个领域的SBT凭证文件

来自分类Dev

如何在具有多个子项目的SBT项目中覆盖子项目中的设置

来自分类Dev

具有本地依赖项的Maven项目中的NoClassDefFoundError

来自分类Dev

VS2005-同一项目中多个具有相同名称的文件

来自分类Dev

如何通过SBT生成具有“ JavaFX”工件的想法项目?

来自分类Dev

具有多个Lib文件夹的Gradle多项目依赖项

来自分类Dev

播放框架/ SBT:分别编译/构建具有两组依赖项的项目

来自分类Dev

从bash创建具有依赖项的jar

来自分类Dev

单个文件具有多个依赖项的makefile

来自分类Dev

具有SBT和IntelliJ的Akka

来自分类Dev

具有依赖项的可运行jar

来自分类Dev

编译具有多个版本的依赖项的项目

来自分类Dev

具有文件依赖项的SBT-web增量编译

来自分类Dev

具有多个可执行文件和依赖项的 Makefile

Related 相关文章

  1. 1

    如何使用sbt和sbt-release发布胖JAR(具有依赖性的JAR)?

  2. 2

    sbt多项目构建,项目之间具有测试依赖性?

  3. 3

    具有多个Lib文件夹的Gradle多项目依赖项

  4. 4

    为什么Maven Assembly Plugin不在具有依赖项的jar中包含我的项目文件?

  5. 5

    使用maven的具有依赖项的可执行jar

  6. 6

    Maven打包项目作为具有依赖关系的可执行JAR

  7. 7

    如何在Windows上使用命令行执行具有外部依赖项的jar文件?

  8. 8

    单个文件具有多个依赖项的makefile

  9. 9

    如何使SBT子项目具有多个Scala版本?

  10. 10

    SBT Scala跨版本,具有聚合和依赖关系

  11. 11

    Eclipse:如何使用带有外部项目依赖项的ant构建可执行jar?

  12. 12

    如何在具有多个电源的单个模块项目中设置sbt-native-packager

  13. 13

    Android Studio-在单个项目中具有共同依赖项的多个android应用

  14. 14

    SBT InputKey具有类似属性的参数

  15. 15

    对具有子/外部项目/依赖项的项目使用cmake

  16. 16

    具有多个领域的SBT凭证文件

  17. 17

    如何在具有多个子项目的SBT项目中覆盖子项目中的设置

  18. 18

    具有本地依赖项的Maven项目中的NoClassDefFoundError

  19. 19

    VS2005-同一项目中多个具有相同名称的文件

  20. 20

    如何通过SBT生成具有“ JavaFX”工件的想法项目?

  21. 21

    具有多个Lib文件夹的Gradle多项目依赖项

  22. 22

    播放框架/ SBT:分别编译/构建具有两组依赖项的项目

  23. 23

    从bash创建具有依赖项的jar

  24. 24

    单个文件具有多个依赖项的makefile

  25. 25

    具有SBT和IntelliJ的Akka

  26. 26

    具有依赖项的可运行jar

  27. 27

    编译具有多个版本的依赖项的项目

  28. 28

    具有文件依赖项的SBT-web增量编译

  29. 29

    具有多个可执行文件和依赖项的 Makefile

热门标签

归档