• Gradle Refresh异常: Could not HEAD

    在idea中使用Gradle的时候遇到了一个奇怪的异常:获取公司内部repository中的包是正常的,但是获取jar源文件的时候却遇到了一些异常。 异常信息可以通过执行“Refresh All Gradle Projects”操作,在Gradle View中看到。 异常信息简略如下: 完整异常信息如下,我做了折叠: 根据异常信息可以看出,是访问公司库发生了异常。检查过repository的配置,用户名和密码都是正确的。后来想到公司的repository是 需要通过https访问的,可能是证书的问题。 找到repository的证书,将证书放到JAVA_HOME/jre/lib/security目录下,重启idea,再次执行“Refresh All Gradle Projects”可以看到不再报异常了。 #######

    [阅读更多...]
  • Gradle访问需要用户名密码的仓库

    公司私有的maven仓库在访问时是需要用户名密码的。访问这种仓库的时候需要在build.gradle中配置repository用户权限,如下面这样: 但是如果每个项目都要配置一次的话,多少会让人有些觉得不耐烦。所以可以这个配置也可以在init中完成。打开gradle安装目录->init.d目录,创建init配置文件“init.gradle”,配置详情如下: 这样配置以后,就可以去掉在build.gradle中的repository相关的配置了,算是简化了build.gradle的配置了。

    [阅读更多...]
  • Gradle中的“provided”

    maven中值为provided的scope,可以让我们声明一个只在编译时使用的非传递性的依赖。在gradle中我们可以声明compileOnly依赖来实现类似的效果(需要java插件)。示例如下: compileOnly声明的使用场景可以一言蔽之:声明的依赖只在compile阶段使用,但是不会在runtime阶段用到,并且这种依赖也是非传递性的。 ######

    [阅读更多...]
  • Gradle依赖排除

    在引用依赖时经常会有这样的问题:某些间接引用的依赖项是不需要的;产生了依赖冲突。此时需要排除一些依赖。 下面的内容介绍了几种在gradle中排除依赖的方式。 在dependency中排除 这种方式是粒度最细的,也是最为繁琐的。此时可以考虑全局设置。 在全局配置中排除 全局配置是在configuration中完成的。 禁用传递依赖 禁用传递依赖需要将属性transitive设置为false。可以在dependency中禁用传递依赖,也可以在configuration中全局禁用: 还可以在单个依赖项中使用@jar标识符忽略传递依赖: 强制使用某个版本 如果某个依赖项是必需的,而又存在依赖冲突时,此时没必要逐个进行排除,可以使用force属性标识需要进行依赖统一。当然这也是可以全局配置的: 在打包时排除依赖 先看一个示例: 代码表示在打zip包的时候会过滤掉名称中包含“unwanted”和“log”的jar包。这里调用的exclude方法的参数和前面的例子不太一样,前面的参数多是map结构,这里则是一个正则表达式字符串。 也可以使用在打包时调用include方法选择只打包某些需要的依赖项: 始终选择最新的依赖的项 最后这个特性和排除依赖没有什么关系,只是顺带说一下。 在依赖项中使用加号+,可以在构建时检查远程仓库是否存在该依赖的新版本,如果存在新版本则下载选用最新版本。更有用的是可以指定依赖某个大版本下的最新子版本,如1.+表示始终采用依赖的1.x序列的最新版本。 示例如下: 就这样。 #####

    [阅读更多...]