我的包装结构与下面类似;
myapplication/
├── my-library/
│ └── src
│ └──main
│ └── scala
│
├── my-other-library/
│ └── src/
│ └──main/
│ └── scala/
│── my-executable-project/
│ │── src/
│ │ └──main/
│ │ └── scala/
│ └── resources/
│ └── somefile.txt
└── build.sbt
当我通过sbt
或intellij运行测试时;
new File("build.sbt")
)相对于myapplication
。当我通过sbt-revolver或二进制文件使用reStart
运行项目时;
my-executable-project
是工作目录。因此,要访问相同的build.sbt
文件,我应该使用new File("../build.sbt")
这个项目结构对我来说很有意义,因为以后可能还会有其他可执行项目。我更喜欢将每个项目都放在父项目下。
仅my-executable-project
被打包并在生产环境中运行。当它再次在那里运行时,my-executable-project
是工作目录。
目前唯一的不便是当我要引用相对文件时,它在测试和常规运行中有所不同。
我通过使用classpath和classloader克服了资源加载问题,但是找不到相对文件引用的方法。当应用运行测试失败时,当测试运行应用失败时。
编辑:这就是我唯一的build.sbt的样子;
lazy val root = project
.in(file("."))
.disablePlugins(RevolverPlugin)
.aggregate(library1, library2, service, common)
.settings(
settings,
name := "parent",
version := "0.1"
)
lazy val common = project
.in(file("common"))
.disablePlugins(RevolverPlugin)
.settings(
settings,
name := "common",
libraryDependencies ++= ... some deps ...
)
lazy val library1 = project
.in(file("library1"))
.disablePlugins(RevolverPlugin)
.dependsOn(common)
.settings(
settings,
name := "library1",
libraryDependencies ++= ... some deps ...
)
lazy val library2 = project
.in(file("library2"))
.disablePlugins(RevolverPlugin)
.dependsOn(common)
.settings(
settings,
name := "library2",
libraryDependencies ++= ... some deps ...
)
lazy val service = project
.in(file("service1"))
.dependsOn(library1, library2)
.enablePlugins(JavaServerAppPackaging)
.settings(
settings,
name := "service1",
mappings in Universal ++= directory("service1/src/main/resources"),
mainClass in Compile := Some("my.main.class.service.Main"),
Revolver.enableDebugging(port = 5005, suspend = false),
libraryDependencies ++= ... some deps ...
)
答案 0 :(得分:1)
我解决了这些问题,将所有sbt
的内容放到了父项目中。
在此处查看文档:{{3}}
build.sbt
的主要结构如下:
lazy val root = (project in file("."))
.aggregate(util, core)
lazy val util = (project in file("util"))
lazy val core = (project in file("core"))
每个项目都可以这样配置:
lazy val core = (project in file("core"))
.enablePlugins(PlayScala, BuildInfoPlugin)
.settings(generalConf.noPublishSettings)
.settings(generalConf.buildInfoSettings)
.settings(coreConf.settings)
在这里,您看到我们使用常规配置generalConf
和特殊项目配置(coreConf
)。然后,这些文件位于/project
文件夹中。