5

我将 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因此,我从intobackend/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.gradlejar 部分看起来像这样

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) }
    }
}
4

1 回答 1

4

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

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

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

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

最后将jar任务设置为dependsOnUI 项目的构建任务,以便最新的 dist 可用../ui/dist

于 2018-04-15T05:59:17.103 回答