如何在 Play 2.3 中使用 publish/publishLocal 发布 webjar 资产?

Posted

技术标签:

【中文标题】如何在 Play 2.3 中使用 publish/publishLocal 发布 webjar 资产?【英文标题】:How to publish webjar assets with publish/publishLocal in Play 2.3? 【发布时间】:2014-11-23 05:31:55 【问题描述】:

Since Play Framework 2.3 assets are packaged into one jar archive file. 我想在项目中自动发布这个 jar,即在 publishpublishLocal 上我希望也发布资产 jar。

如何实现?

【问题讨论】:

“既然 playframework 2.3 资源被打包到一个 webjar 归档文件中。” 是什么意思?您能否分享一个指向描述该功能的文档的链接?我似乎无法重现它。 playframework.com/documentation/2.3.x/Assets,部分:“公共资产如何打包?” 您能否确认资产 webjar 仅在您 dist 而不是 publishLocal 时创建?我设法仅在 dist 中创建了资产 jar。 是的,命令package 或玩! start 也创建 webjar 文件,但 publishLocal 或(我想也是)publish 不要创建它。 【参考方案1】:

inspect tree dist 之后,我设法找到了生成资产文件的任务playPackageAssets

[play-publish-webjar] $ inspect playPackageAssets
[info] Task: java.io.File
[info] Description:
[info]
[info] Provided by:
[info]  file:/Users/jacek/sandbox/play-publish-webjar/root/*:playPackageAssets
[info] Defined at:
[info]  (sbt.Defaults) Defaults.scala:641
[info] Dependencies:
[info]  *:playPackageAssets::packageConfiguration
[info]  *:playPackageAssets::streams
[info] Reverse dependencies:
[info]  *:scriptClasspath
[info]  universal:mappings
[info] Delegates:
[info]  *:playPackageAssets
[info]  ./*:playPackageAssets
[info]  */*:playPackageAssets

一个简单的解决方案可能是将playPackageAssets 生成的资产webjar 附加publishLocal 任务的工件。将以下内容添加到build.sbt(类型用于显示您使用的内容):

import play.PlayImport.PlayKeys._

packagedArtifacts in publishLocal := 
  val artifacts: Map[sbt.Artifact, java.io.File] = (packagedArtifacts in publishLocal).value
  val assets: java.io.File = (playPackageAssets in Compile).value
  artifacts + (Artifact(moduleName.value, "asset", "jar", "assets") -> assets)

对您希望表现出类似行为的其他任务重复此操作。

但我很怀疑这是最好的解决方案。

【讨论】:

使用 build.sbt 文件中的这些更改,在 ivy 中的 assets 文件夹中的 jar 文件中发布资产文件。但是要在另一个 sbt 项目中添加 jar 依赖项,jar 文件应该在 jars 文件夹中。 不!在 sbt 文件中使用分类器导致在 jars 文件夹而不是 assets 文件夹中搜索 libraryName-assets 意味着:C:\Users\M.Kashi\.ivy2\local\com.rh\??_2.11\1.0-SNAPSHOT\jars\??_2.11-assets.jar 已解决。看到这个:***.com/questions/26322655/…

以上是关于如何在 Play 2.3 中使用 publish/publishLocal 发布 webjar 资产?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Play Framework 2.3 中向 FakeRequest 添加查询字符串参数?

如何在 Play 2.2.3 项目中使用 Spark 1.2.0,因为它因 NoSuchMethodError:akka.util.Helpers 而失败?

在 Play framework 2.3 中设置 cookie sameSite

为啥在 Play 2.3 项目中 sbt 编译后 sbt 失败并显示 NoClassDefFoundError: play/Play$ in Play 2.2.x 项目?

如何将 -mem 传递给 dockerized Play 应用程序

如何找出我正在使用的 Play 版本?