2016-11-16 43 views
1

当sbt-assembly构建一个fat jar时,它将所有依赖关系放在主文件夹中。我需要构建一个罐子,看起来像这样在sbt程序集中指定jar结构

--domain

  • 域类

- LIB

  • 依赖类

是可以用sbt程序集或其他任何方式来做到这一点lugin?

回答

1

如果你想单独您的应用程序的jar文件您dependecy jar文件,这里是我发现SBT最实用的方法;

创建项目/ plugins.sbt文件,如果不存在,添加以下行:

addSbtPlugin("org.xerial.sbt" % "sbt-pack" % "0.8.0") 

加入这一行后刷新项目。 注意:插件版本可能会及时更改。

当SBT刷新完成更新您的build.sbt文件是这样的:

lazy val MyApp = project.in(file(".")) 
    .settings(artifactName := {(
     sv: ScalaVersion, 
     module: ModuleID, 
     artifact: Artifact) => "MyApp.jar" 
    }) 
    .settings(packSettings) 

然后运行:

sbt pack 

或者,如果你这样做是为孩子的项目,运行以下命令:

sbt "project childproject" clean pack 

这将很好地分离你的主jar文件和你的依赖ency罐子。

您的应用程序jar将在目标scala文件夹中。

您的依赖关系将在target/pack/lib中。

以这种方式,您可以一次部署您的依赖关系。

而且,只要您更改应用程序,就可以部署应用程序jar文件。

因此,在每次更改时都不必部署超级jar文件。

而且在生产中,你可以运行你的应用程序,如:

java -cp "MyApp.jar:dependency_jars_folder/*" com.myapp.App