java - SBT构建,在编译和运行时从子项目运行主类

标签 java scala sbt multi-project subproject

我有一个简单的构建工具多项目问题...

我有以下目录结构代表我的 java sbt 项目:

/project1
/project2
/project3

因此所有项目共享一个共同的直接父文件夹。 项目 2 和 3 在项目 1 的 build.sbt 中引用如下:

.dependsOn(project2, project3)
.aggregate(project2, project3)

lazy val project2 = ProjectRef(file("../project2"), "project2")

lazy val project3 = ProjectRef(file("../project3"), "project3")

这样在 project1 和其他项目之间就有了依赖关系。

到目前为止一切正常,一切正常。

但现在我想在执行任何其他操作之前从 project2 执行 main 方法。 当我从父项 (project1) 执行“运行”任务时,我希望 project2 中的特定类执行其主要方法。我该怎么做呢? sbt 文档解释说“聚合意味着在聚合项目上运行任务也会在聚合项目上运行它。”: http://www.scala-sbt.org/0.13.5/docs/Getting-Started/Multi-Project.html#aggregation

我没有看到我在 projet2 上的主类被执行。我还将其添加到项目 2 的 build.sbt 中:

mainClass in (Compile, run) := Some("Main")

该项目的目标是在编译时和运行时生成代码。 Project2 的工作是生成 Java 和 Javascript 代码。应该在构建其他项目之前生成 could。

这可能吗?否则,我将不得不满足于独立于其他项目运行 project2。

=]

最佳答案

如果我有如下所示的结构:

+ 根 +--- 后端 +--- 前端 和一个类似于 http://www.scala-sbt.org/0.13/docs/Multi-Project.html 中所示的 build.sbt 项目,让我们说:

lazy val commonSettings = Seq(
  version := "0.1.0-SNAPSHOT",
  scalaVersion := "2.12.1",
  resolvers := allResolvers,
  libraryDependencies := AllLibraryDependencies
)

lazy val client = (project in file("client")).
  //  .enablePlugins(PlayScala)
  settings(commonSettings: _*).
  settings(
    name := "client"
  )
  .aggregate(common, frontend, backend)
  .dependsOn(common, frontend, backend)


lazy val common = (project in file("common")).
  settings(commonSettings: _*).
  settings(
    name := "common"
  )

lazy val frontend = (project in file("frontend")).
  settings(commonSettings: _*).
  settings(
    name := "frontend"
  )
  .aggregate(common)
  .dependsOn(common)

lazy val backend = (project in file("backend")).
  settings(commonSettings: _*).
  settings(
    name := "backend"
  )
  .aggregate(common)
  .dependsOn(common)

`

然后执行前端项目中的一个类,这个命令对我有用:

sbt "frontend/runMain sample.cluster.transformation.frontend.TransformationFrontendApp 2551"

关于java - SBT构建,在编译和运行时从子项目运行主类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25476733/

相关文章:

java - 为什么静态初始化器不能抛出异常

java - 需要帮助在 Mac 上安装 JUnit/How to add JUnit to Path environment variable on Macos

scala - 我可以使用本地模板(不是 GitHub)运行 sbt new 吗?

scala - Scala 的 case 对象可以用在 match 的 case 中吗

java - 在 Scala 中将类型作为参数传递

google-api - 谷歌 API : object oauth2 is not a member of package com. google.api.services

azure - 使用 sbt : Unable to find credentials for 将 scala 项目发布到 azure feed

java - Grails 中 Quartz 工作的 withTransaction?

Java swing 边框和 Boxlayout

Scala:两种方法,不同的参数类型但相同的代码:如何统一?