Gradle-Jar将Vue封装到Spark中

Gradle-Jar将Vue封装到Spark中,gradle,vue.js,packaging,spark-framework,Gradle,Vue.js,Packaging,Spark Framework,我正在将VUEUI与Spark Java后端捆绑在一起这两个模块都是独立构建的,使用以下结构可以很好地工作: project +-- backend | +-- src | | +-- main | | +-- resources | | +-- public <= Where the jar is picking the static files | +-- build | +-- lib

我正在将VUEUI与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正在复制文件,但在创建jar之后
换句话说,我必须创建两次jar才能使其正确

如何指示Gradle在打包/公开之前等待拷贝完成

我的
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) }
    }
}

虽然您所做的对我来说似乎是合乎逻辑的(并且没有bug),但我认为gradle没有理由不等到复制完成。不过,我可以建议你稍微改变一下吗

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

jar {
    // ...
    from( '../ui/dist')
}
这更好,因为
public
可以保持生成代码的干净(通过构建ui项目),并且可以节省复制时间(以及由此产生的潜在问题)


最后使
jar
task
dependsOn
成为UI项目的构建任务,这样最新的dist就可以在
/UI/dist

中找到,我能想到的一件事是添加cp任务,将
UI/dist
文件夹中的所有文件复制到
backend/src/main/resources
文件夹中,你有什么样的项目可以玩吗?@chenrui我这么做了,但结果有点随机,好像jar正在触发副本,但没有等待它完成。你可以使用任务依赖性来确保排序。@chenrui这正是我尝试的。你能用一个例子来回答吗?差不多。所有资源最终都位于jar根目录中。我可以为这个特定的文件集指定一个“to”吗?您是否尝试了类似于
jar{into('.''.'){from'.'.'.''.'}}
,请注意
into
块中的
from
。也许可以看到答案
jar {
    // ...
    from( '../ui/dist')
}