我正在使用sbt 0.13.12,这是我的项目root|---通用|---sub1|---sub2
在构建中。sbt取决于公共。如果我按sbt project sub1 run运行就可以了。但是,当我将子项目打包为jar文件时,我运行sub1。jar文件中,错误显示sub1无法找到一类公共的。
我的目的是包装sub1。jar和sub2。在每个jar文件中编译带有通用代码的jar。
--更新--
我尝试作为建议回答。运行sbt汇编
时遇到这个问题:
而且,是的!我搜索并遵循了这些解决方案,但无法解决新问题:
使用此插件https://github.com/sbt/sbt-assembly您可以创建包含所有依赖项的胖jar。
在这种情况下,您可以键入:
sbt
project sub1
assembly
编辑
关于重复数据消除错误,您必须对依赖项使用合并策略。我一直在使用以下方法,解决了99%的问题:
lazy val mergeStrategy = Seq(
assemblyMergeStrategy in assembly := {
case PathList("javax", "servlet", xs@_*) => MergeStrategy.first
case PathList("META-INF", "io.netty.versions.properties") => MergeStrategy.last
case PathList(ps@_*) if ps.last endsWith ".html" => MergeStrategy.first
case "application.conf" => MergeStrategy.concat
case "reference.conf" => MergeStrategy.concat
case m if m.toLowerCase.endsWith("manifest.mf") => MergeStrategy.discard
case m if m.toLowerCase.matches("meta-inf.*\\.sf$") => MergeStrategy.discard
case _ => MergeStrategy.first
}
)
lazy val root = Project(
id = "root",
base = file(".")
) aggregate(common, database, server)
lazy val server = (project in file("server"))
.settings(cdbServerConfig: _*)
.settings(mergeStrategy: _*)
.settings(libraryDependencies ++= (commonDependencies ++ akkaDependencies ++ jsonDependencies))
.dependsOn(database)
lazy val database = (project in file("database"))
.settings(commonSettings: _*)
.settings(libraryDependencies ++= (commonDependencies ++ databaseDependencies))
.dependsOn(common)
lazy val common = (project in file("common"))
.settings(commonSettings: _*)
.settings(libraryDependencies ++= commonDependencies)
在我的例子中,我想打包服务器项目,这取决于数据库项目,数据库项目依赖于公共项目。
使用合并策略对我来说很好。
但正如我所说,99%的情况下它可以工作,但当它不能工作时,我一直在使用以下插件:
https://github.com/jrudolph/sbt-dependency-graph
所以我可以看到依赖树,看到什么是冲突的。
sbt子项目是否可以有自己的目录?或者只有根项目可以用。Scala帮助器文件为构建项目的目录?。下面是我目前的建筑结构。无法访问中定义的对象。 更新:sub-project-1/build.sbt中的以下sbt定义 由于以下错误而失败 Common在/my-project/projects/Common.scala中定义,没有问题。但是Localhost是在/my-project/sub-proj
我有一个多模块java项目,我想在其中创建jar(bin、source、javadoc),但我很难从子项目配置中的子项目中获取变量。 这是我在根项目中的build.gradle文件: 这就是建筑。gradle文件子项目之一: 当我想运行构建脚本时,我得到了以下异常: 无法获取类型为org的对象的未知属性“mainClassName”。格雷德尔。应用程序编程接口。JAVA档案内部的默认舱单。 在子流
我有一个Gradle多项目构建,看起来像这样: 我希望将目录< code>shared中的所有项目作为依赖项添加到< code>plugins中的所有项目。 更一般地说:我如何按目录配置子项目? settings.gradle的内容: build.gradle的内容:
是否可以设置子gradle项目的父项目。 在我的例子中,所有父子项目都位于文件层次结构中的同一级别。例如 > 代码 > /父项目 构建。格拉德尔 /child项目1 构建。格拉德尔 /子项目2 构建。格拉德尔 这里,项目1依赖于项目2,所以我将它们称为 也在我的设置中。gradle文件,我有 有了它,我可以从父项目文件夹运行任务,但单个任务不会从子项目运行。
配置子项目 到目前为止你已经把ToDo项目根据功能拆分成多个模块,接下来可以用之前的方法来定义构建逻辑,下面有几点需要主要: 根目录和子目录使用相同的group和version属性值 所有的子目录都是Java项目需要Java插件来正常工作,所以你只需要在子项目中应用Java插件 web子项目是唯一一个依赖外部库的项目,它需要打包成WAR而不是JAR 子项目之间可以定义模块依赖 接下来你将学习如何定
我试图显示woocommerce产品子类别的列表,包括任何子类别(的子类别)-如何修改以下代码来执行此操作-其中显示cat ID 51中的类别列表: