为什么InetAddress.getLocalHost()。getHostName()返回与bash“hostname”不同的值?
我有一个build.gradle任务,就像我的开发盒上的冠军一样,生成一个属性文件,记录生成构建的机器的名称。 逻辑很简单……
def hostname = InetAddress.getLocalHost().getHostName();
在我的开发框中,这总是产生与从bash shell中输入主机名相同的值。
bobk-mbp:DM_Server bobk$ hostname bobk-mbp.local
但是,在我们的jenkins CI服务器上,bash hostname返回一个东西,但是我调用了InetAddress.getLocalHost()。getHostName(); 返回别的东西。 需要在jenkins机器上更改以使这两个返回相同的值?
假设你在Linux上,从o / s执行的hostname命令返回内核配置的主机名。
InetAddress.getHostName()使用您的操作系统中配置的命名服务(DNS)对服务器的IP地址进行反向查找。
如果你需要o / s所理解的主机名,那么通过System.getenv从环境变量中获取它可能是最简单的选择。 这不是一种完全可靠的方法,但它可能就足够了,无需深入研究网络或系统管理员。
来自InetAddress.getHostName()的API文档;
如果使用主机名创建此InetAddress,则将记住并返回此主机名; 否则,将执行反向名称查找,并将根据系统配置的名称查找服务返回结果。 如果需要查找名称服务,请调用getCanonicalHostName。
因此,您可能需要在Jenkins服务器上配置DNS。 最简单的方法是编辑/ etc / hosts(我假设你的Jenkins在Linux上运行),并确保它看起来像这样:
127.0.0.1 localhost localhost.localdomain .
- Gradle提供了与Intellij的依赖关系
- 使用spock junit测试和gradle构建系统在控制台上输出unit testing结果
- 用gradle简单的protobuf编译
- 使用Intellij在gradle项目中设置断点
- 如何通过在gradle命令行上传递version属性来设置project.version?
- Android Flavors:每种风味的多个java和src目录
- Intellij资源不在构建工件中
- ‘jvm-1.8’不是’-target’的有效选择
- React-native build error Android – java.lang.UnsupportedClassVersionError:com / android / build / gradle / AppPlugin:不支持的major.minor版本52.0