【问题标题】:Gradle Jar packaging Vue into SparkGradle Jar 将 Vue 打包成 Spark
【发布时间】:2018-04-15 14:04:37
【问题描述】:

我将 Vue UI 与 Spark Java 后端捆绑在一起。
两个模块都是独立构建的,可以很好地使用以下结构:

  project
  +-- backend
  |   +-- src
  |   |   +-- main
  |   |       +-- resources
  |   |           +-- public <= Where the jar is picking the static files
  |   +-- build
  |       +-- libs <= Gradle Jar output
  +-- ui
      +-- dist <= Vue build output

在后端,Gradle 将 backend/src/main/resources/public 捆绑到 Jar /public 中。因此,我从ui/dist 复制到backend/src/main/resources/public 作为jar 任务依赖项。

  task copyUI(type: Copy) {
      from( '../ui/dist')
      into( 'src/main/resources/public')
  }

  jar.dependsOn( copyUI)

Gradle 正在复制文件,但创建 jar 之后。
换句话说,我必须创建两次 jar 才能使其正确。

如何指示 Gradle 在打包 /public 之前等待复制完成

我的build.gradle jar 部分看起来像这样

jar {
    manifest {
        attributes(
                'Main-Class': 'tld.domain.MainClass'
        )
    }
    from {
        configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
        configurations.runtime.collect { it.isDirectory() ? it : zipTree(it) }
    }
}

【问题讨论】:

  • 我能想到的一件事是添加cp任务将ui/dist文件夹中的所有文件复制到backend/src/main/resources文件夹中,你有什么示例项目可以玩吗?
  • @chenrui 我这样做了,但结果有点随机,好像 jar 正在触发复制但没有等待其完成
  • 你可以有任务依赖来确保排序。
  • @chenrui 这正是我尝试过的。您能否举例说明一下?

标签: gradle vue.js packaging spark-framework


【解决方案1】:

虽然你所做的对我来说似乎是合乎逻辑的(并且没有错误),但我认为 gradle 没有理由不等到复制完成。不过,我可以建议做点不同的事情吗?

您可以在from 块中直接指示jar 任务从../ui/dist 加载文件。这样,您就不必实际将任何内容复制到public 目录。

jar {
    // ...
    from( '../ui/dist')
}

这更好,因为public 可以保持生成代码的干净(通过 ui 项目的构建)并且您可以节省复制时间(并可能因此而出现问题)。

最后使jar任务dependsOn你的UI项目的构建任务,以便最新的dist在../ui/dist中可用

【讨论】:

  • 差不多。所有资源最终都在 jar 根目录中。我可以为这个特定的文件集指定一个“to”吗?
  • 你试过into
  • 类似于jar { into('...') { from '....' }},注意into 块内的from。可能会看到this答案
猜你喜欢
  • 2018-07-30
  • 1970-01-01
  • 2014-10-13
  • 2016-12-04
  • 2013-12-28
  • 1970-01-01
  • 2018-10-25
  • 2017-10-17
  • 1970-01-01
相关资源
最近更新 更多