如何使用Spring Boot Gradle Plugin和bootJar任务有条件地排除java文件?

时间:2018-03-21 23:29:47

标签: java spring-boot gradle

我有一些代码,我不希望根据条件包含在jar文件中。

我的构建脚本看起来像

plugins {
    id 'java'
    id 'org.springframework.boot' version '2.0.0.RELEASE'
}

sourceSets {
    main {
        java {
            if (project.environment == 'prod') {
                exclude '**/dangerous/**'
            }
            forEach {
                println it.absolutePath
            }
        }
    }
}

现在,当我使用gradlew clean build bootJar -Penvironment=prod运行脚本时,除了危险的java文件之外的所有内容的绝对路径都会打印出来,但它们仍然仍然包含在jar中。

如果我删除了启动插件并运行jar任务,那么危险的类文件仍然包含在jar中。

gradlew clean build jar -Penvironment=prod

plugins {
    id 'java'
}

sourceSets {
    main {
        java {
            if (project.environment == 'prod') {
                exclude '**/dangerous/**'
            }
            forEach {
                println it.absolutePath
            }
        }
    }
}

如果我向jar任务添加exclude子句,则不会打印危险文件,它们不会包含在jar中。

gradlew clean build jar -Penvironment=prod

plugins {
    id 'java'
}

sourceSets {
    main {
        java {
            if (project.environment == 'prod') {
                exclude '**/dangerous/**'
            }
            forEach {
                println it.absolutePath
            }
        }
    }
}

jar {
    exclude '**/dangerous/**'
}

如果我启用了启动插件,并使用bootJar任务(继承自Jar任务)(gradlew clean build bootJar -Penvironment=prod),我看不到打印出危险文件,但文件仍包​​含在罐子

plugins {
    id 'java'
    id 'org.springframework.boot' version '2.0.0.RELEASE'
}

sourceSets {
    main {
        java {
            if (project.environment == 'prod') {
                exclude '**/dangerous/**'
            }
            forEach {
                println it.absolutePath
            }
        }
    }
}

bootJar {
    exclude '**/dangerous/**'
}

如何使用Spring Boot Gradle Plugin和bootJar任务有条件地排除java文件?

3 个答案:

答案 0 :(得分:0)

我缩小了问题范围。我没有放上上面的所有插件,因为我认为唯一重要的是java和spring boot。但是,我的实际代码也使用protobuf插件。如果我删除配置属性generatedFilesBaseDir,则它会成功排除dangerous目录。

然而,这开启了一个新的问题,到底发生了什么?

我正在指定生成的文件base dir属性,所以我可以在源代码中引用生成的类,但我想我可能需要为proto创建一个不同的项目,并添加该项目作为对我的main的引用模块。

修改

为protobuf文件创建一个单独的项目并将其作为项目引用似乎是解决此问题的可行方法。

答案 1 :(得分:0)

我在使用2.0.1.RELEASE时遇到同样的问题。我使用bootJar选项创建了jar。在其中添加要从可执行jar中排除的文件模式的排除。 在Spring 2.0.4.RELEASE版本中可以正常工作。

bootJar {
    exclude("**/dangerous/*")
}

答案 2 :(得分:-3)

只需制作自己的jar,学习gradle,不要使用这么多插件。并且...这个问题已经正确回答了。我上周读了它,你必须删除它并复制代码。很好的举动。