2016-11-16 51 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