设置idea的ant工具的代理
现在主流的项目都使用maven来构建了,还在使用ant的项目应该是比较老旧了,现在因为需要调试zookeeper的源码,所以需要用到ant。使用时遇到点问题,借此记录一下爬坑过程。1. 问题复现IDE使用的是Intellij idea,因此使用的是它自带的ant插件,导入zookeeper源码,点开ant界面,Run Target->compile,然后就出现如下错误:Error getti
现在主流的项目都使用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:\workspace\zookeeper-3.4.13\src\java\lib\ivy-2.4.0.jar
C:\workspace\zookeeper-3.4.13\build.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 Files\AdoptOpenJDK\jdk-8.0.292.10-hotspot\bin\java.exe
-Xmx512m -Xss2m
-Dant.home=C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant" "
-Dant.library.dir=C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib"
-Dfile.encoding=UTF-8 -classpath "C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-antlr.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-apache-bcel.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-apache-bsf.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-apache-log4j.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-apache-oro.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-apache-regexp.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-apache-resolver.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-apache-xalan2.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-commons-logging.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-commons-net.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-jai.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-javamail.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-jdepend.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-jmf.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-jsch.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-junit.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-junit4.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-junitlauncher.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-launcher.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-netrexx.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-swing.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-testutil.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-xz.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant.jar;C:\Program Files\AdoptOpenJDK\jdk-8.0.292.10-hotspot\lib\tools.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\idea_rt.jar" com.intellij.rt.ant.execution.AntMain2 -logger com.intellij.rt.ant.execution.IdeaAntLogger2 -inputhandler com.intellij.rt.ant.execution.IdeaInputHandler -buildfile C:\workspace\zookeeper-3.4.13\build.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:\workspace\zookeeper-3.4.13\src\java\lib\ivy-2.4.0.jar
通过上述日志,可以看到,Ant build 的时候,传入了 Ant 相关的JVM参数。我们在文本框输入的http代理,最终也会在该命令行里面输出。因此,通过这些参数来定位源码,会大幅缩减源码文件。
上图就是搜出来的结果,共三个源文件。从名字和相关代码来看,AntCommandLineBuilder 比较像是所用到的源码(没有进一步跟踪,所以,不能确定)。
同时,为了保证正确性,对比了 AntCommandLineBuilder 和 AntArtifactBuildTaskProvider 两个文件,针对 -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 Files\AdoptOpenJDK\jdk-8.0.292.10-hotspot\bin\java.exe"
-Dhttps.proxyHost=1.1.1.1
-Dhttps.proxyPort=8080
-Xmx512m -Xss2m
-Dant.home=C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant
-Dant.library.dir=C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib
-Dfile.encoding=UTF-8 -classpath "C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-antlr.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-apache-bcel.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-apache-bsf.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-apache-log4j.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-apache-oro.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-apache-regexp.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-apache-resolver.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-apache-xalan2.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-commons-logging.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-commons-net.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-jai.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-javamail.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-jdepend.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-jmf.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-jsch.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-junit.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-junit4.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-junitlauncher.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-launcher.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-netrexx.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-swing.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-testutil.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant-xz.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\ant\lib\ant.jar;C:\Program Files\AdoptOpenJDK\jdk-8.0.292.10-hotspot\lib\tools.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.3\lib\idea_rt.jar" com.intellij.rt.ant.execution.AntMain2 -logger com.intellij.rt.ant.execution.IdeaAntLogger2 -inputhandler com.intellij.rt.ant.execution.IdeaInputHandler -buildfile C:\workspace\zookeeper-3.4.13\build.xml compile
build.xml
init
ivy-download
ivy 下载成功,说明代理设置生效。
4. 总结
- 编译过程中,老是会遇到各种各样的问题。但仔细查看错误信息,会发现大多问题都体现在日志里面。
- 下载源码编译的时候,尽量先阅读官网的相关说明,通常官网都会明确告知需要依赖哪些资源库等信息,这样可以减少错误的发生。
- 遇到问题时,搜索的关键字很重要,关键字不准确,那么显示的结果也就鱼龙混杂,此时需要带着疑问去尝试,可以排除很多不正确的方案。
更多推荐
所有评论(0)