ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Gradle实战及Maven项目迁移采坑记录

2020-12-21 12:02:09  阅读:211  来源: 互联网

标签:core 插件 采坑 demo gradle Maven common Gradle maven


最近准备把项目从maven迁移到gradle。由于之前也没接触过gradle,中途也遇到了一些坑,这里记录一下供后来者参考,适合gradle新手小白参考。后续如果有其他gradle相关问题也会继续更新。
这里的版本采用的是6.7。环境安装参考官方文章,通过gradle -version 判断环境是否正确。

如何使用全局参数

在gradle.properties中可以定义全局参数,如以下:

springBootVersion=2.3.6.RELEASE

在build.gradle中通过${xxx}引用:

...
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
...

父子项目工程如何定义

这里定义了一个demo-core,目录结构如下:

/demo-core
	/demo-core-common
		build.gradle
	/demo-core-service
		build.gradle
	build.gradle
	settings.gradle
	gradle.properties

在setting.gradle中定义子项目包名

rootProject.name = 'demo-core'
include 'demo-core-common'
include 'demo-core-service'

在顶层的build.gradle可以通过subprojects,设置全局子项目的配置

subprojects {
    apply plugin: 'java'
    apply plugin: 'idea'

    group = 'com.lwtxzwt'
    version = '1.0.0-SNAPSHOT'
    sourceCompatibility = 11
    targetCompatibility = 11

    repositories {
        mavenLocal()
        maven { url 'http://xxx.xxx.xxx/repository/maven-public/' }
        mavenCentral()
    }

    jar {
        enabled = true
    }
    
    tasks.withType(JavaCompile) {
        options.encoding = 'UTF-8'
    }
}

如何上传到私服仓库

这里我们需要将demo-core-common打包上传到私服仓库,配置demo-core-common目录下的build.gradle

apply plugin: 'java'
apply plugin: 'maven'

uploadArchives {
    repositories {
        def nexusUrl = '这里配置maven的仓库'
        mavenDeployer {
            def releasesRepoUrl = "$nexusUrl/repository/maven-releases/"
            def snapshotsRepoUrl = "$nexusUrl/repository/maven-snapshots/"
            repository(url: version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl) {
                authentication(userName: "$mavenUser", password: "$mavenPassword")
            }
        }
    }
}

这样在gradle的task中就会出现upload,也可以通过upload命令上传。
在这里插入图片描述

如何在service中依赖common的jar

我们需要在demo-core-service中依赖demo-core-common的jar包,配置demo-core-service

dependencies {
    implementation project(':demo-core-common')
	...
}

外部依赖更新后,本地未生效

当外部依赖的代码更新后,本地未生效。这是由于gradle存在缓存机制,需要关闭缓存机制,或者删除本地jar包,才会触发更新。这里将缓存期限设置为0,每次运行都会重新下载依赖。

configurations.all {
    resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}

implementation和api的区别

implementation 表示依赖,即只依赖不打包进来。个人理解有点类似maven中的optional设置为true。
api 表示打包,即不仅依赖还打包进来,这样上层就不用重复依赖。

compileOnly编译时可用

compileOnly 表示编辑时用,即不参与打包。最经典的例子就是lombok,一般配合annotationProcessor使用。
annotationProcessor 表示用于注解处理器的依赖配置。不太常用,目前只在lombok中用到。

dependencies {

    compileOnly 'org.projectlombok:lombok:1.18.16'
    annotationProcessor 'org.projectlombok:lombok:1.18.16'

}

gradle插件

类似maven的插件,gradle也提供了很多基础功能插件。

  • 做maven上传到私服时,我们就用了maven的插件’maven’。
  • 当应用’io.spring.dependency-management’插件的时候,Spring Boot插件将自动从使用的Spring
    Boot版本导入spring-boot-dependencies,你可以省略bom中声明依赖的版本号。
  • 对于IDE的插件’idea’或者’eclipse’等。

其他更多插件可以到官方查阅:https://plugins.gradle.org

标签:core,插件,采坑,demo,gradle,Maven,common,Gradle,maven
来源: https://blog.csdn.net/zwt122755527/article/details/111469113

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有