如何在Gradle Jar构建任务中排除Test目录及相关资源
解决Gradle构建Jar包含Test类和资源的问题
嘿,刚看了你的问题,作为Gradle和Maven新手遇到这种打包问题太正常了,咱们一步步捋清楚解决:
为什么你之前的exclude配置没生效?
你之前写的exclude('PATH/src/test/')是盯着源码路径来的,但Gradle的jar任务打包的是编译后的class文件和处理完成的资源文件,它们都存在build/classes和build/resources目录下,根本不是你本地的src/test路径,所以这个规则匹配不到任何内容,自然没效果。
正确的Jar打包排除配置
修改你的jar任务配置,针对编译后的文件路径做排除:
tasks.named('jar'){ manifest { attributes('Implementation-Title': project.name, 'Implementation-Version': project.version) } // 排除所有层级下的test目录及其内容(覆盖类文件和资源) exclude '**/test/**' // 精准排除你提到的绝对不能包含的test.properties文件 exclude 'test.properties' }
简单解释下这两条规则:
**/test/**:匹配任意目录层级下的test文件夹,不管是编译后的类还是资源文件,都会被排除test.properties:精准锁定你说的那个敏感文件,确保不会漏网
额外检查:避免Test资源被误打包
默认情况下,java-library插件的processResources任务只会处理src/main/resources下的资源,src/test/resources里的内容会被单独处理到build/resources/test,不会自动进入主Jar。如果你的Jar里还是出现了test资源,可以检查下有没有自定义过资源处理的相关任务。
验证打包结果
修改配置后,先执行./gradlew clean jar(clean是为了清除之前的缓存,避免干扰),然后去build/libs目录下打开生成的Jar包,看看test相关的内容是不是已经被剔除了。
关于Maven发布的小提示
因为你要把这个Jar作为Maven仓库使用,放心用./gradlew publish发布就行——默认发布的是主Jar(对应components.java),不会包含test相关的Jar包。
内容的提问来源于stack exchange,提问作者cdub
相关产品推荐
相关产品推荐

