如何处理多个构建目标,例如开发、测试、主要?

2024-02-09

我目前正在从 Maven 迁移到 SBT,并且我正在努力理解如何处理多个构建目标(开发、测试、训练、生产等)。

例如,我有一个persistence.xml看起来像这样:

<properties>
    <property name="javax.persistence.jdbc.driver" value="oracle.jdbc.driver.OracleDriver"/>
    <property name="javax.persistence.jdbc.url" value="${db.connectionURL}"/>
    <property name="javax.persistence.jdbc.user" value="${db.username}"/>
    <property name="javax.persistence.jdbc.password" value="${db.password}"/>
    <property name="eclipselink.target-database" value="Oracle10"/>
</properties>

有了 Maven,使用配置文件来处理这个问题真的很容易。

我已经尝试过这里建议的 SBT 方法,但这种方法没有取得任何成功。如何将环境配置文件配置添加到 SBT https://stackoverflow.com/questions/17193795/how-to-add-environment-profile-config-to-sbt.

另外,使用这种方法,我需要为每个新环境创建一个新目录。我只是认为必须有更好的方法来使用 SBT 处理这种设置?


tl;dr Use ivyConfigurations添加自定义配置和resourceGenerators处理每个环境的文件。

所有学分都归于尤金·横田 https://stackoverflow.com/users/3827/eugene-yokota的答案如何将环境配置文件配置添加到 SBT https://stackoverflow.com/q/17193795/1305344。有一些修改使我的解决方案......cough...cough...稍微好一些。

下列build.sbt定义了两个新配置 -dev and qa。它还定义了resourceGenerators每个配置有效地提供了一种访问新资源生成器执行配置的方法:

val Dev = config("dev") extend Runtime

val Qa  = config("qa") extend Runtime

ivyConfigurations ++= Seq(Dev, Qa)

// http://www.scala-sbt.org/0.13.5/docs/Howto/generatefiles.html#resources
lazy val bareResourceGenerators: Seq[Setting[_]] = Seq(
  resourceGenerators += Def.task {
    val file = resourceManaged.value / "demo" / "myapp.properties"
    println(s"Inside ${configuration.value}")
    val contents = s"config=${configuration.value}"
    IO.write(file, contents)
    Seq(file)
  }.taskValue
)

inConfig(Dev)(Defaults.configSettings ++ bareResourceGenerators)

inConfig(Qa)(Defaults.configSettings ++ bareResourceGenerators)

在新的资源生成器中,您可以做任何您想做的事情,并且可以使用以下命令进行每个配置的处理configuration为您提供配置名称的设置:

> show dev:configuration
[info] dev
> show qa:configuration
[info] qa

现在当你执行show qa:resources你会看到生成了两个文件target/scala-2.10/resource_managed/qa/demo/myapp.properties包含特定于配置的内容:

> show qa:resources
Inside qa
[info] List(/Users/jacek/sandbox/envs/target/scala-2.10/resource_managed/qa/demo/myapp.properties, /Users/jacek/sandbox/envs/src/qa/resources)

现在的技巧是使用resourceGenerator来满足您的需求,并且由于您使用的是Scala代码,您可以做任何您想做的事情 - 只需使用configuration.value作为特定于配置的代码的限定符。

假设您想使用qa- 标准中的特定属性文件src/main/resources目录。只需知道该值绑定到哪里(该值来自什么配置和设置)。只是compile:resourceDirectory.

> show compile:resourceDirectory
[info] /Users/jacek/sandbox/envs/src/main/resources

只需使用resourceDirectory in Compile每当你需要一个“稳定的”(aka配置固定)值如src/main/resources.

val props = (resourceDirectory in Compile).value / s"${configuration.value.name}.properties"
println(s"Read files from $props")

通过以上几行你会得到:

> show qa:resources
Inside qa
Read files from /Users/jacek/sandbox/envs/src/main/resources/qa.properties
[info] List(/Users/jacek/sandbox/envs/target/scala-2.10/resource_managed/qa/demo/myapp.properties, /Users/jacek/sandbox/envs/src/qa/resources)

> show dev:resources
Inside dev
Read files from /Users/jacek/sandbox/envs/src/main/resources/dev.properties
[info] List(/Users/jacek/sandbox/envs/target/scala-2.10/resource_managed/dev/demo/myapp.properties, /Users/jacek/sandbox/envs/src/dev/resources)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何处理多个构建目标,例如开发、测试、主要? 的相关文章

  • 自定义 NIO 文件系统无法通过 SBT 的测试任务加载

    为了进行测试 我使用内存中的 NIOFileSystem执行 memoryfs https github com openCage memoryfs 我以前已经利用过它 并且它似乎运行良好 例如梅文 然而 现在 在SBT项目中 不可能初始化
  • 如何强制maven更新本地repo

    我在一个项目中编译了一个 jar 文件 以便可以在第二个项目中使用它 我可以在 m2 文件夹中看到 jar 文件 但在第二个项目中 它抱怨找不到工件 我想我必须强制 Maven 更新索引 缓存一些东西 但不知道到底是什么 任何提示 谢谢 更
  • Maven 项目无法在 Tomcat 7 上运行

    我正在尝试在 Tomcat 7 上运行 Maven 项目 但它似乎不起作用 当我从命令提示符输入时mvn clean tomcat7 run 我收到此错误 SEVERE A child container failed during sta
  • tmatesoft.svn.core.SVNAuthenticationException:svn:E170001

    我们正在一个遗留项目 maven 中工作来设置devop 詹金斯首发 Jenkins 构建现在没有问题 但是 在将 sonarqube 与 jenkins 集成时 我们收到以下错误 ERROR Error during SonarQube
  • SBT、Jetty 和 Servlet 3.0

    我有一个非常小的问题 我有以下 build sbt 文件 name Tueet libraryDependencies org eclipse jetty jetty webapp 8 1 2 v20120308 调用 sbt update
  • Spring Boot 应用程序的 .jar 无法正常工作(tomcat-embed-jasper 问题)

    我对 Spring boot 和 Maven 相当陌生 我在尝试运行可执行文件 jar 时遇到问题 我的最终目标是创建 jar 的 docker 映像 以便我可以部署我的应用程序 当我执行 mvn clean install 时 我得到了应
  • 将 Maven 控制台与 m2eclipse 一起使用

    Maven 新手在这里 有没有办法在 Eclipse 中打开控制台并在 M2Eclipse 插件上执行 Maven 命令 这是一个非常好的插件 但我环顾四周 没有找到我想要的一些功能 谢谢 如果你想运行特定的maven插件 你可以这样做 g
  • “强制更新快照/版本” - 这是什么意思

    在 Maven 项目中 选择 更新项目 时 有一个名为 强制更新快照 版本 的选项 它有什么作用 强制更新快照 版本 就像运行以下命令 mvn U install U 也可以用作 update snapshot 看here http boo
  • Intellij - 调试器断点不再工作

    我正在正常工作 调试Java Maven项目与IntelliJ 2018 2 1 然后我单击 Intellij 停止应用程序以对代码进行一些修改 当我在调试模式下再次启动应用程序时 它 调试器 只是停止工作 现在 应用程序需要大约 10 2
  • 多模块项目的 Maven 阶段顺序?

    对不起 我是 Maven 的菜鸟 这是我的maven项目目录 project pom xml moduleA moduleB sub moduleA sub moduleB sub moduleC moduleC 当然 每个模块和子模块内都
  • sbt 使用不同选项编译任务

    我有一个基本的 sbt 项目 我想用相同的源文件打包两个 jar 但使用不同的选项进行编译 因此 一个项目 2 个编译 但具有不同的选项 scalacOptions 和 2 个 jar 作为输出 我不想执行 sbt 两次 更改选项 有人有想
  • Jenkins:从神器部署战争文件

    我们正在使用Jenkins建立 maven 并部署工件 JAR 和 WAR s 到内部工件服务器 快照和版本 对于部署 目前 我们有 Jenkins 作业来打包 war 文件 来自发布 scm 标签 并部署到不同的环境 服务器 我们想要跳过
  • 如何默认将 Maven 插件附加到阶段?

    我有一个 Maven 插件应该在编译阶段运行 所以在项目中consumes我的插件 我必须做这样的事情
  • 分析 sbt 构建

    我的 sbt 构建需要很长时间 它又大又复杂 很难知道从哪里开始清理 看起来 sbt 保留了很多关于构建结构的元数据 包括相互依赖关系 命名任务 范围界定等 有了所有这些元数据 似乎很容易跳入并测量每个不同任务 及其范围 花费的时间 在代码
  • Maven中archetype.xml和archetype-metadata.xml有什么区别

    我正在尝试向我的原型添加额外的变量 具体来说 我的原型包含一个 logback xml 文件 我想用我从原型生成的项目的名称填充日志文件名 我正在执行此处答案中的说明将额外的属性传递给 Maven archetype generate ht
  • 如何在发布期间复制未版本化的测试资源:执行?

    我的问题与 Maven 在发布时不会复制未跟踪的资源 https stackoverflow com questions 10378708 maven doesnt copy untracked resources while releas
  • 如何使用 Maven 的 Java API 访问 Maven Artifact POM?

    我正在尝试检索整个依赖关系树及其从项目根部开始的 pom 我从文件系统中已经存在的 POM 开始 但我不确定如何从存储库中检索依赖项 pom 我正在使用以下代码来访问依赖项列表 从列表中我获得了有关文物的所有信息 我只是不确定如何访问存储库
  • maven默认过滤器目录的好处[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 最近我发现了maven资源过滤并在文档中看到了一条注释 标准目录布局src main filters 资源过滤器文件 我注意到maven不搜索声
  • Maven:无法传输文件 XXX 返回代码为: 501 ,ReasonPhrase:HTTPS 必需

    我在构建 Maven 项目时收到意外的 501 错误代码 该消息显示需要 HTTPS 但我没有更改我的 settings xml 如何检查我的配置是否发生更改 我怎样才能让事情正常运转 其原因解释于Maven 依赖项失败并出现 501 错误
  • 构建/部署 EJB .jar 及其依赖项

    我是 Java EE 新手 我使用 Maven Eclipse 和 jBoss WildFly 我有一个war项目 当我构建项目时 它的所有依赖项都打包在war文件输入WEB INF lib 现在我正在尝试创建一个ejb项目 我有

随机推荐