当前位置: 首页 > news >正文

太原网站建设价格种子搜索引擎 磁力天堂

太原网站建设价格,种子搜索引擎 磁力天堂,一个可以用来做测试的网站,免费做app的网站gradle多模块依赖管理最佳实践 多模块项目依赖管理定义子模块使用buildSrc定义插件SofastModulePluginOptional 依赖 增加dependencies子模块其他子模块web 多模块项目依赖管理 依赖管理是项目开发过程中必不可少的操作,在gradle如何优雅的管理多个模块依赖是一个非…

gradle多模块依赖管理最佳实践

  • 多模块项目依赖管理
    • 定义子模块
    • 使用buildSrc定义插件
      • SofastModulePlugin
      • Optional 依赖
    • 增加dependencies子模块
    • 其他子模块
      • web

多模块项目依赖管理

依赖管理是项目开发过程中必不可少的操作,在gradle如何优雅的管理多个模块依赖是一个非常值得探讨的问题,本文总结了最佳管理的方式,如 统一三方依赖版本,dependencies

定义子模块

rootProject.name = 'project'
include("dependencies")
include("common") 
include("web") 
include("domain") 
include("service") 

使用buildSrc定义插件

plugins {id 'java-gradle-plugin'id "java"id "groovy"
}description = "sofast dependency manager"
group 'cc.sofast.dependency'
version '1.0.0'repositories {mavenLocal()mavenCentral()gradlePluginPortal()maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }maven { url 'https://repo.spring.io/milestone' }
}dependencies {implementation('org.springframework.boot:org.springframework.boot.gradle.plugin:3.1.5')implementation('io.spring.gradle:dependency-management-plugin:1.1.3')
}gradlePlugin {plugins {version {id = 'sofast.module.plugin'implementationClass = 'cc.sofastframework.gradle.SofastModulePlugin'displayName = "Dependency Manager Plugin"description = "Manage Dependent Versions"}}
}

SofastModulePlugin

public class SofastModulePlugin implements Plugin<Project> {@Overridepublic void apply(Project project) {System.out.println("Sofast Dependency Manager plugin.");//java 插件project.getPlugins().apply(JavaPlugin.class);project.getPlugins().apply(JavaBasePlugin.class);//springbootObject springBootPluginEnable = project.getProperties().get("springBootPluginEnabled");if (Boolean.valueOf(String.valueOf(springBootPluginEnable)).equals(Boolean.TRUE)) {System.out.println("enabled SpringBootPlugin and DependencyManagementPlugin.");project.getPlugins().apply(SpringBootPlugin.class);project.getPlugins().apply(DependencyManagementPlugin.class);}project.getPlugins().apply(JavaConventionsPlugin.class);//依赖仓库project.getRepositories().mavenLocal();project.getRepositories().mavenCentral();project.getRepositories().maven(mavenArtifactRepository -> mavenArtifactRepository.setUrl("https://maven.aliyun.com/nexus/content/groups/public/"));project.getRepositories().maven(mavenArtifactRepository -> mavenArtifactRepository.setUrl("https://repo.spring.io/milestone"));}
}
  • JavaConventionsPlugin 引入optional 依赖
package cc.sofastframework.gradle;import cc.sofastframework.gradle.optional.OptionalDependenciesPlugin;
import org.gradle.api.JavaVersion;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.artifacts.Configuration;
import org.gradle.api.artifacts.ConfigurationContainer;
import org.gradle.api.artifacts.Dependency;
import org.gradle.api.plugins.JavaBasePlugin;
import org.gradle.api.plugins.JavaPluginExtension;
import org.gradle.api.tasks.bundling.Jar;
import org.gradle.api.tasks.compile.JavaCompile;
import org.gradle.api.tasks.javadoc.Javadoc;
import org.gradle.external.javadoc.CoreJavadocOptions;import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Set;/*** @author apple*/
public class JavaConventionsPlugin implements Plugin<Project> {private static final String SOURCE_AND_TARGET_COMPATIBILITY = "17";private static final String ENCODING = "UTF-8";@Overridepublic void apply(Project project) {System.out.println("JavaConventionsPlugin is enabled");//enabled optional pluginproject.getPlugins().apply(OptionalDependenciesPlugin.class);//configuration conventionproject.getPlugins().withType(JavaBasePlugin.class, (java) -> {configureJavaConventions(project);configureJavadocConventions(project);configureDependencyManagement(project);});}private void configureJavadocConventions(Project project) {project.getTasks().withType(Javadoc.class, (javadoc) -> {CoreJavadocOptions options = (CoreJavadocOptions) javadoc.getOptions();options.source(SOURCE_AND_TARGET_COMPATIBILITY);options.encoding(ENCODING);options.addStringOption("Xdoclint:none", "-quiet");});}private void configureJavaConventions(Project project) {if (!project.hasProperty("toolchainVersion")) {JavaPluginExtension javaPluginExtension = project.getExtensions().getByType(JavaPluginExtension.class);javaPluginExtension.setSourceCompatibility(JavaVersion.toVersion(SOURCE_AND_TARGET_COMPATIBILITY));}project.getTasks().withType(JavaCompile.class, (compile) -> {compile.getOptions().setEncoding(ENCODING);List<String> args = compile.getOptions().getCompilerArgs();if (!args.contains("-parameters")) {args.add("-parameters");}if (project.hasProperty("toolchainVersion")) {compile.setSourceCompatibility(SOURCE_AND_TARGET_COMPATIBILITY);compile.setTargetCompatibility(SOURCE_AND_TARGET_COMPATIBILITY);} else if (buildingWithJava17(project)) {args.addAll(Arrays.asList("-Werror", "-Xlint:unchecked", "-Xlint:deprecation", "-Xlint:rawtypes","-Xlint:varargs"));}});}private boolean buildingWithJava17(Project project) {return !project.hasProperty("toolchainVersion") && JavaVersion.current() == JavaVersion.VERSION_17;}private void configureDependencyManagement(Project project) {ConfigurationContainer configurations = project.getConfigurations();Configuration dependencyManagement = configurations.create("dependencyManagement", (configuration) -> {configuration.setVisible(false);configuration.setCanBeConsumed(false);configuration.setCanBeResolved(false);});configurations.matching((c) -> c.getName().endsWith("Classpath") || c.getName().toLowerCase().endsWith("annotationprocessor")).all((c) -> c.extendsFrom(dependencyManagement));Dependency pulsarDependencies = project.getDependencies().enforcedPlatform(project.getDependencies().project(Collections.singletonMap("path", ":dependencies")));dependencyManagement.getDependencies().add(pulsarDependencies);project.getPlugins().withType(OptionalDependenciesPlugin.class, (optionalDependencies) -> configurations.getByName(OptionalDependenciesPlugin.OPTIONAL_CONFIGURATION_NAME).extendsFrom(dependencyManagement));}
}

Optional 依赖

public class OptionalDependenciesPlugin implements Plugin<Project> {/*** Name of the {@code optional} configuration.*/public static final String OPTIONAL_CONFIGURATION_NAME = "optional";@Overridepublic void apply(Project project) {Configuration optional = project.getConfigurations().create("optional");optional.setCanBeConsumed(false);optional.setCanBeResolved(false);project.getPlugins().withType(JavaPlugin.class, (javaPlugin) -> {SourceSetContainer sourceSets = project.getExtensions().getByType(JavaPluginExtension.class).getSourceSets();sourceSets.all((sourceSet) -> {project.getConfigurations().getByName(sourceSet.getCompileClasspathConfigurationName()).extendsFrom(optional);project.getConfigurations().getByName(sourceSet.getRuntimeClasspathConfigurationName()).extendsFrom(optional);});});}}

增加dependencies子模块

dependencies 模块统一管理三方包的版本和dependencies 依赖如下:

import static org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATESplugins {id 'java-platform'
}javaPlatform {allowDependencies()
}ext {seataVersion = '1.6.1'feignVersion = '12.1'mybatisPlusVersion = '3.5.3.1'
}dependencies {constraints {api "io.seata:seata-rm-datasource:$seataVersion"api "io.github.openfeign:feign-core:$feignVersion"api "com.baomidou:mybatis-plus-boot-starter:$mybatisPlusVersion"}println("spring boot version: " + BOM_COORDINATES)api platform(BOM_COORDINATES)api platform('org.springframework.cloud:spring-cloud-dependencies:2022.0.4')
}

其他子模块

web

//引入插件
plugins {id 'sofast.module.plugin'
}//引入依赖,会自动引入dependencies 继承其定义的版本
dependencies {implementation(project(":domain"))optional 'org.springframework.boot:spring-boot-starter-jdbc'annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
}
http://www.cadmedia.cn/news/2315.html

相关文章:

  • 成都网站建设有名的制作链接的app的软件
  • 初中网站建设南京seo外包
  • 规范门户网站的建设和管理办法广东短视频seo搜索哪家好
  • 厦门建设企业网站建设湘潭网站seo磐石网络
  • 怎么制作网站视频教程步骤2021年十大热点事件
  • 自己网站上做支付宝怎么收费的seo快速排名工具
  • 怎么向百度提交网站友情链接的检查方法
  • 正规网站建设建设公司seo全站优化全案例
  • 太原百度网站建设seo交流
  • 装修公司加盟哪家好网站优化 福州
  • 定制西装需要多少钱推广优化关键词
  • 路由器做网站终端seo薪酬水平
  • 加强局网站建设品牌广告
  • 广告推广费用上海牛巨微seo关键词优化
  • 重庆装饰公司15大排名济南seo网络优化公司
  • 什么网站可以做时间加减关注公众号推广2元一个
  • 北京专业做网站的公司太原百度推广开户
  • 插画师培训网站建设友情链接是免费的吗
  • 手机海外代理ipseo黑帽有哪些技术
  • 搜狐三季度营收多少长沙网站优化
  • 自己学做网站seo建站工具
  • 做阿里巴巴怎么进公司网站石家庄网站建设
  • dw网站建设基本流程百度搜索推广创意方案
  • 主流的网站建设软件百度seo网站优化 网络服务
  • 网站程序源码关键词优化推广
  • 网站建设对企业带来什么作用网站优化有哪些类型
  • 郑州微科网站建设seo搜索优化是什么
  • 网站建设 贸易广告推广方式有哪几种
  • 域名建设好了怎么在建设网站免费网站建设模板
  • 建购物的网站需要多少钱市场调研表模板