【问题标题】:Gradle move directory to root before war is generated在生成战争之前,Gradle 将目录移动到根目录
【发布时间】:2021-08-25 23:18:57
【问题描述】:

我有一个.war,它必须有一个可以通过命令行运行的入口点,所以类的目录必须在.war文件的根目录下。

如何将目录移动到war的根目录?

我试过了:

plugins {
    id 'war'
}

war {
    manifest {
        attributes(
            'Main-Class': '____embedded.____EntryPoint'
        )
    }
}

tasks.register('moveEntryPoint') {
    description 'Copies entrypoint to root dir.'
    doLast {
        ant.move file: "${buildDir}/classes/java/main/____embedded/",
                 todir: "${buildDir}/____embedded/"
    }
}

compileJava.finalizedBy(moveEntryPoint)

当我尝试构建时出现此错误:

Received unknown event for /home/username/eclipse-workspace/apex/app/build/classes/java/main/____embedded
Stopping file watching and invalidating VFS after an error happened

【问题讨论】:

    标签: java gradle build.gradle


    【解决方案1】:

    有几种方法可以做到这一点:

    1. 不要移动,只是复制。 https://docs.gradle.org/current/dsl/org.gradle.api.tasks.Copy.html

    然后,将您的任务附加到processResources。

    1. 告诉战争插件包含一个目录。
    war {
        webAppDirectory = file('src/main/webapp')
        from 'src/rootContent' // adds a file-set to the root of the archive
    }
    

    https://docs.gradle.org/current/userguide/war_plugin.html#sec:war_customizing

    【讨论】:

    • 我做了from 'src/main/java/____embedded/',它把.java文件移动到了根目录,而不是.class的目录
    • @user5507535 Java文件是源代码,需要复制编译好的类。听起来创造战争是你面临的最小挑战。
    • 使用from 'build/classes/java/main/' 有效,但如果我在main 目录中有其他东西怎么办?如果我使用from 'build/classes/java/main/____embedded',它只会复制____embedded 中的文件,而不是整个目录。
    • @user5507535 如果要复制整个目录,请参阅this answer。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-29
    • 1970-01-01
    • 2012-04-07
    • 1970-01-01
    相关资源
    最近更新 更多