gradle 构建错误问题解决汇总

通过已经存在的代码使用IDEA构建项目,并且本身没用过gradle,也没有项目相关的构建文档,所以摸索着来构建项目,一路踩坑,整理成笔记,记录下来。

问题一:构建服务提示 org.gradle.api.internal.ClosureBackedAction 错误

错误提示:

Build file /Users/xxx/build.gradle' line: 4

A problem occurred evaluating root project 'xxx'.
> org.gradle.api.internal.ClosureBackedAction

根据提示找到对应的文件查看,是

apply plugin: 'maven-publish'  

通过IDEA看,这里的写法没有问题,没有语法错误提示,说明写法本身应该没问题
这个错误通过命令 gradle build --stacktrace 构建之后,会提示一个ClassNotFond 的错误,开发java时间长的都知道这个错误多半是jar包冲突或者缺少jar
这里的错误是gradle的版本不对,这里可以尝试适应 3.1以下版本,我这里解决得时候使用了3.1版本解决
注意:一般gradle构建项目一开始会下载一个gradle的jar包,但是有可能那个版本的gradle并不是项目本身用的版本
gradle 不同的版本会有一些语法差异、一些插件的支持也有不同,假如不知道哪个版本可以用来构建现成的项目,建议在项目创建时就确定好版本并且显式地配置出来
通过idea构建的项目最好在idea中确认一下版本配置是否正确
gradle 构建错误问题解决汇总_第1张图片

标题问题二:引入新jar包提示连接连接被拒绝

  • HTTP请求拒绝

关键错误日志:

Warning:<i><b>root project 'XXXX': Unable to resolve additional project configuration.</b>
Details: org.gradle.api.artifacts.ResolveException: Could not resolve all dependencies for configuration 'detachedConfiguration5'.
Caused by: org.gradle.internal.resolve.ModuleVersionResolveException: Could not resolve group:xxxjar-3.0.0.
Required by:
    project :XXXX
Caused by: org.gradle.internal.resolve.ModuleVersionResolveException: Could not resolve group:xxxjar-3.0.0.
Caused by: org.gradle.api.resources.ResourceException: Could not get resource 'http://nexus.xxx.net/nexus/content/groups/public/xxxjar-3.0.0.pom'.
Caused by: org.gradle.internal.resource.transport.http.HttpRequestException: Could not GET 'http://nexus.xxx.net/nexus/content/groups/public/xxxjar/xxxjar-3.0.0.pom'.
Caused by: org.apache.http.conn.HttpHostConnectException: Connect to 127.0.0.1:7890 [/127.0.0.1] failed: Connection refused (Connection refused)
Caused by: java.net.ConnectException: Connection refused (Connection refused)</i>

点击url直接访问链接,可以正常访问
再看后面的提示看实际请求的是127.0.0.1,这个就是本机地址,
明显看出来请求的地址是错误的
百度之后很多人说是因为被代理了,大部分所说的解决方案是找到 gradle.properties 文件,这个文件在项目中的目录下会有,在.gradle文件夹中也会有,具体内容有

systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=1080
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=1080

删除或者修改之后即可正常获取jar包,大部分人应该到这里就解决了,但是我的并没有

  • 问题并没有那么简单

我的情况很特殊,并没有在.gradle文件夹中找到gradle.properties
并且在项目中的 gradle.properties 也没有找到对应的代理配置
全局搜索了地址 127.0.0.1 与端口7890 均没有搜索到相关的配置文件。
问题到这里陷入了僵局,在找解决方案的时候找到了一个有趣的东西

task(shadow) {
     
  for (Object key : System.properties.keys()) {
     
      System.out.println(key + " = " + System.properties.get(key))
  }
}

作用是打印配置信息,我的项目中是放在subprojects下面,即:

subprojects {
     
  ....
  task(shadow) {
     
    for (Object key : System.properties.keys()) {
     
        System.out.println(key + " = " + System.properties.get(key))
    }
  }
}

重新构建之后打印了配置信息,发现有输出要到的配置信息:

http.proxyHost = 127.0.0.1
http.proxyPort = 7890

这个时候就确定肯定有地方做了这个代理的操作,现在要做的就是解决代理的问题,因为在.gradle文件夹中没有找到gradle.properties 文件,所以直接修改项目中的 gradle.properties 文件
尝试直接给配置个空

systemProp.http.proxyHost=
systemProp.http.proxyPort=

重试之后,发现问题并没有解决,但是问题的错误改变了

Warning:<i><b>root project 'xxx': Unable to resolve additional project configuration.</b>
Details: org.gradle.api.artifacts.ResolveException: Could not resolve all dependencies for configuration 'detachedConfiguration5'.
Caused by: org.gradle.internal.resolve.ModuleVersionResolveException: Could not resolve com.xxx:xxxjar.
Required by:
    project :xxx
Caused by: org.gradle.internal.resolve.ModuleVersionResolveException: Could not resolve com.xxx:xxxjar-3.0.0.
Caused by: org.gradle.api.resources.ResourceException: Could not get resource 'http://nexus.xxx.net/nexus/content/groups/public/xxxjar-3.0.0.pom'.
Caused by: org.gradle.internal.resource.transport.http.HttpRequestException: Could not GET 'http://nexus.xxx.net/nexus/content/groups/public/xxxjar/xxxjar-3.0.0.pom'.
Caused by: java.net.SocketException: Can't connect to SOCKS proxy:Connection refused (Connection refused)</i>

变成了SOCKS proxy ,继续查看配置环境打印的内容发现有

socksProxyHost = 127.0.0.1
socksProxyPort = 7891

代理的地址还是有配置,这个时候继续修改这个配置

systemProp.http.proxyHost=
systemProp.http.proxyPort=
systemProp.socksProxyPort=
systemProp.socksProxyHost=

重试之后发现jar包正常引入
说明显式地配置为空是有用的,到这里问题解决了

  • 别的方法

在搜索代理配置的时候发现了两个有意思的配置:

http.nonProxyHosts = 192.168.0.0/16|*.192.168.0.0/16|10.0.0.0/8|*.10.0.0.0/8|172.16.0.0/12|*.172.16.0.0/12|127.0.0.1|localhost|*.localhost|local|*.local
socksNonProxyHosts = 192.168.0.0/16|*.192.168.0.0/16|10.0.0.0/8|*.10.0.0.0/8|172.16.0.0/12|*.172.16.0.0/12|127.0.0.1|localhost|*.localhost|local|*.local

直接看就是这部分配置的host就不走代理,尝试将我需要访问的host添加进去,修改为

systemProp.http.nonProxyHosts=nexus.xxxx.net|192.168.0.0/16|*.192.168.0.0/16|10.0.0.0/8|*.10.0.0.0/8|172.16.0.0/12|*.172.16.0.0/12|127.0.0.1|localhost|*.localhost|local|*.local
systemProp.socksNonProxyHosts=nexus.xxxx.net|192.168.0.0/16|*.192.168.0.0/16|10.0.0.0/8|*.10.0.0.0/8|172.16.0.0/12|*.172.16.0.0/12|127.0.0.1|localhost|*.localhost|local|*.local

重试之后发现jar包正常引入,这样的配置也能解决问题,解决方式可以自由选择,我这里选择了前者

问题虽然解决但是造成原因还未发现

你可能感兴趣的:(JAVA,java,gradle)