加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – SBT build,在Compile上运行子项目的主类并运行

发布时间:2020-12-15 00:44:32 所属栏目:Java 来源:网络整理
导读:我有一个简单的构建工具Multi-Project问题… 我有以下目录结构代表我的java sbt项目: /project1/project2/project3 所以所有项目共享一个共同的直接父文件夹. 项目1的build.sbt中引用了项目2和3,如下所示: .dependsOn(project2,project3).aggregate(projec
我有一个简单的构建工具Multi-Project问题…

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

/project1
/project2
/project3

所以所有项目共享一个共同的直接父文件夹.
项目1的build.sbt中引用了项目2和3,如下所示:

.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上的主要课程被执行了.我还将它添加到project2的build.sbt中:

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

该项目的目标是在Compiletime和运行时生成代码. Project2的工作是生成Java和Javascript代码.可以在构建其他项目之前生成.

那可能吗?如果没有,我将不得不独立于其他项目运行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,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”

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读