栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

设置idea的ant工具的代理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

设置idea的ant工具的代理

现在主流的项目都使用maven来构建了,还在使用ant的项目应该是比较老旧了,现在因为需要调试zookeeper的源码,所以需要用到ant。使用时遇到点问题,借此记录一下爬坑过程。

1. 问题复现

IDE使用的是Intellij idea,因此使用的是它自带的ant插件,导入zookeeper源码,点开ant界面,Run Target->compile,然后就出现如下错误:

Error getting https://repo1.maven.org/maven2/org/apache/ivy/ivy/2.4.0/ivy-2.4.0.jar to C:workspacezookeeper-3.4.13srcjavalibivy-2.4.0.jar
C:workspacezookeeper-3.4.13build.xml:392: java.net.ConnectException: Connection timed out: connect

zookeeper需要用ivy.jar,下载ivy.jar失败。
因为使用的是公司网络,看到这个错误,第一反应就是没有配置代理。另外,IDEA的系统设置里面,HTTP代理已设置,执行ant并未生效,说明它没去读IDEA的配置。于是,查看ant官网https://ant.apache.org/manual/index.html, 如何配置代理。

ant官网提供了几种设置代理的方式,针对IDEA的ant插件,比较合适的是手动设置JVM参数。增加如下参数即可:

-Dhttp.proxyHost=proxy -Dhttp.proxyPort=8080

现在问题来了,上面的参数配置到哪里呢?

2. 设置代理

一番摸索,发现在ant面板上,有一个 Properties 的标签,点击该标签,会弹出配置参数的界面,也可右键ant面板上的任意target命令,如下:

上图中的各个参数,都可在IDEA官网中找到解释(点击上图中左下角的问号图标,即可打开)。

通过官网介绍,符合条件的应该就是 Ant command line, 点击 Execution 标签,可看到如下界面:

注意文本框下面的那行小字 Use “-J” prefix to specify JVM arguments ,这个在官网的说明里面没有描述,所以我看到这个时有点疑惑,到底该如何添加呢?一顿瞎操作之后,都没蒙对组合方式。
比如:-Jhttps.proxyHost=1.1.1.1,执行Run,报错如下:

Error: Could not find or load main class https.proxyHost=1.1.1.1


Ant build completed with one error and no warnings in 0s at 2022/3/24 15:14

不想瞎猜了,同时也想搞清楚它是如何解析参数的,所以最后去下载了IDEA的源码。
IDEA的源码很大,又该从哪里入手呢?这里就通过搜关键字来找源码了,简单粗暴一点就是直接搜 Ant 关键字,但这样搜出来的源文件还是比较多,需要挨个确认。我们可以再使用精确一点关键字,这个关键字又是什么呢?

留意一下Ant build的时候的输出信息(输出到IDEA的 Messages 窗口里),如下:

"C:Program FilesAdoptOpenJDKjdk-8.0.292.10-hotspotbinjava.exe
 -Xmx512m -Xss2m
 -Dant.home=C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libant" "
 -Dant.library.dir=C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlib" 
 -Dfile.encoding=UTF-8 -classpath "C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-antlr.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-apache-bcel.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-apache-bsf.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-apache-log4j.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-apache-oro.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-apache-regexp.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-apache-resolver.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-apache-xalan2.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-commons-logging.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-commons-net.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-jai.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-javamail.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-jdepend.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-jmf.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-jsch.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-junit.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-junit4.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-junitlauncher.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-launcher.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-netrexx.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-swing.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-testutil.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-xz.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant.jar;C:Program FilesAdoptOpenJDKjdk-8.0.292.10-hotspotlibtools.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libidea_rt.jar" com.intellij.rt.ant.execution.AntMain2 -logger com.intellij.rt.ant.execution.IdeaAntLogger2 -inputhandler com.intellij.rt.ant.execution.IdeaInputHandler -buildfile C:workspacezookeeper-3.4.13build.xml compile
build.xml
init
ivy-download
Getting: https://repo1.maven.org/maven2/org/apache/ivy/ivy/2.4.0/ivy-2.4.0.jar
To: C:workspacezookeeper-3.4.13srcjavalibivy-2.4.0.jar

通过上述日志,可以看到,Ant build 的时候,传入了 Ant 相关的JVM参数。我们在文本框输入的http代理,最终也会在该命令行里面输出。因此,通过这些参数来定位源码,会大幅缩减源码文件。

上图就是搜出来的结果,共三个源文件。从名字和相关代码来看,AntCommandLineBuilder 比较像是所用到的源码(没有进一步跟踪,所以,不能确定)。
同时,为了保证正确性,对比了 AntCommandLineBuilderAntArtifactBuildTaskProvider 两个文件,针对 -J 参数都做了相同的解析。源码如下:

    final String additionalParams = AntBuildFileImpl.ANT_COMMAND_LINE_PARAMETERS.get(container);
    if (additionalParams != null) {
      for (String param : ParametersList.parse(additionalParams)) {
        if (param.startsWith("-J")) {
          final String cutParam = param.substring("-J".length());
          if (cutParam.length() > 0) {
            vmParametersList.add(cutParam);
          }
        }
        else {
          programParameters.add(param);
        }
      }
    }

由上述代码可以看到,-J 前缀会被截取丢掉,只读取后面的字符串。 所以,下面可以放心大胆的给出结论了。
输入参数格式如下:

-J-Dhttps.proxyHost=1.1.1.1 -J-Dhttps.proxyPort=8080

-J 参数之间使用空格隔开,这个在IDEA官网文档也有提到。

注意:上面传入的是 https 的代理,因为maven库的url使用的是 https ,如果传入 http 的代理,则会报连接超时的错误(Connection timed out: connect),和开始提到的错误一样。

3. 重新运行

代理设置完成之后,重新Run target,可看到Ant Build信息里面,命令行已经包含了刚才设置的代理,见下:

"C:Program FilesAdoptOpenJDKjdk-8.0.292.10-hotspotbinjava.exe"  
 -Dhttps.proxyHost=1.1.1.1
 -Dhttps.proxyPort=8080
 -Xmx512m -Xss2m
 -Dant.home=C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libant
 -Dant.library.dir=C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlib
 -Dfile.encoding=UTF-8 -classpath "C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-antlr.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-apache-bcel.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-apache-bsf.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-apache-log4j.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-apache-oro.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-apache-regexp.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-apache-resolver.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-apache-xalan2.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-commons-logging.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-commons-net.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-jai.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-javamail.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-jdepend.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-jmf.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-jsch.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-junit.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-junit4.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-junitlauncher.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-launcher.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-netrexx.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-swing.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-testutil.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant-xz.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libantlibant.jar;C:Program FilesAdoptOpenJDKjdk-8.0.292.10-hotspotlibtools.jar;C:Program FilesJetBrainsIntelliJ IDEA Community Edition 2021.1.3libidea_rt.jar" com.intellij.rt.ant.execution.AntMain2 -logger com.intellij.rt.ant.execution.IdeaAntLogger2 -inputhandler com.intellij.rt.ant.execution.IdeaInputHandler -buildfile C:workspacezookeeper-3.4.13build.xml compile
build.xml
init
ivy-download

ivy 下载成功,说明代理设置生效。

4. 总结

编译过程中,老是会遇到各种各样的问题。但仔细查看错误信息,会发现大多问题都体现在日志里面。下载源码编译的时候,尽量先阅读官网的相关说明,通常官网都会明确告知需要依赖哪些资源库等信息,这样可以减少错误的发生。遇到问题时,搜索的关键字很重要,关键字不准确,那么显示的结果也就鱼龙混杂,此时需要带着疑问去尝试,可以排除很多不正确的方案。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/777355.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号