springboot2.5编译时对java程序的约定处理
package org.springframework.boot.build; class JavaConventions { void apply(Project project) {// 任务执行过程,对java基础插件展开一系列处理 project.getPlugins().withType(JavaBasePlugin.class, (java) -> { project.getPlugins().apply(TestFailuresPlugin.class); // 测试失败处理 configureSpringJavaFormat(project); // 配置java代码格式 project.setProperty("sourceCompatibility", "1.8"); // 设置jdk兼容版本到1.8 configureJavaCompileConventions(project); // 配置java编译约定 configureJavadocConventions(project); // 配置javadoc的约定 configureTestConventions(project); // 配置测试约定 configureJarManifestConventions(project); // 配置生成jar的清单文件约定 configureDependencyManagement(project); // 配置依赖管理 }); } /** * 提取项目的jar清单下的约定配置 * @param project */ private void configureJarManifestConventions(Project project) { // 创建法律声明资源文件提取任务 ExtractResources extractLegalResources = project.getTasks().create("extractLegalResources", ExtractResources.class); // 获取资源提取的目标路径,并重设置为法律声明文件目录 extractLegalResources.getDestinationDirectory().set(project.getLayout().getBuildDirectory().dir("legal")); // 设置资源提取的资源名称集:许可证和版权通知 extractLegalResources.setResourcesNames(Arrays.asList("LICENSE.txt", "NOTICE.txt")); // 设置资源提取时要用到的一个属性:version,设置值为当前项目的版本号 extractLegalResources.property("version", project.getVersion().toString()); // 获取项目资源集 SourceSetContainer sourceSets = project.getExtensions().getByType(SourceSetContainer.class); // 通过资源集获取源代码包任务名集 SetsourceJarTaskNames = sourceSets.stream().map(SourceSet::getSourcesJarTaskName) .collect(Collectors.toSet()); // 通过资源集获取Javadoc包任务名集 Set javadocJarTaskNames = sourceSets.stream().map(SourceSet::getJavadocJarTaskName) .collect(Collectors.toSet()); // jar包组装 project.getTasks().withType(Jar.class, (jar) -> project.afterEvaluate((evaluated) -> { // 给jar包添加版权声明信息,并放在META-INF下 jar.metaInf((metaInf) -> metaInf.from(extractLegalResources)); // 给jar包生成清单信息 jar.manifest((manifest) -> { Map attributes = new TreeMap<>(); attributes.put("Automatic-Module-Name", project.getName().replace("-", ".")); attributes.put("Build-Jdk-Spec", project.property("sourceCompatibility")); attributes.put("Built-By", "Spring"); attributes.put("Implementation-Title", determineImplementationTitle(project, sourceJarTaskNames, javadocJarTaskNames, jar)); attributes.put("Implementation-Version", project.getVersion()); manifest.attributes(attributes); }); })); } /** * 实现名称裁决 * @param project * @param sourceJarTaskNames * @param javadocJarTaskNames * @param jar * @return */ private String determineImplementationTitle(Project project, Set sourceJarTaskNames, Set javadocJarTaskNames, Jar jar) { if (sourceJarTaskNames.contains(jar.getName())) { return "Source for " + project.getName(); } if (javadocJarTaskNames.contains(jar.getName())) { return "Javadoc for " + project.getName(); } return project.getDescription(); } private void configureTestConventions(Project project) { project.getTasks().withType(Test.class, (test) -> {// 定位到java程序 withOptionalBuildJavaHome(project, (javaHome) -> test.setExecutable(javaHome + "/bin/java")); test.useJUnitPlatform(); test.setMaxHeapSize("1024M"); }); project.getPlugins().apply(TestRetryPlugin.class); project.getTasks().withType(Test.class, (test) -> project.getPlugins().withType(TestRetryPlugin.class, (testRetryPlugin) -> { TestRetryTaskExtension testRetry = test.getExtensions().getByType(TestRetryTaskExtension.class); testRetry.getFailOnPassedAfterRetry().set(true); testRetry.getMaxRetries().set(isCi() ? 3 : 0); })); } private boolean isCi() {// 判定是否是脚手架环境 return Boolean.parseBoolean(System.getenv("CI")); }
声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 嗅谱网
转载请注明:转自《springboot2.5编译时对java程序的约定处理》
本文地址:http://www.xiupu.net/archives-10629.html
关注公众号:
微信赞赏
支付宝赞赏