强制java.net.preferIPv4Stack为true

时间:2017-05-03 13:29:55

标签: java maven jar system-properties

我目前正致力于一个暗示多播连接的Java应用程序。

我的开发机器是Mac,我在连接到多播组时遇到了麻烦。我通过添加参数来修复它-Djava.net.preferIPv4Stack=true是我正在运行的配置。我无法在运行时将此属性设置为true,因为JVM在启动时而不是在运行时读取它一次。

我的问题是,当我发布我的应用程序时,我希望用户简单地双击'在图标上,即使用户使用的是Windows,Mac或任何Linux发行版,它也会毫无问题地启动。

所以我的问题是,如何强制JVM使用此参数启动.jar?有没有办法告诉maven这样做?

非常感谢提前

2 个答案:

答案 0 :(得分:0)

因为这是在maven中标记的,

您可以通过脚本传递此类JVM参数。 因此,为每种类型的计算机创建启动脚本。像start.sh for unix start.bat for windows。

使用maven配置文件将正确的机器相关脚本复制到最终工件目录,即目标目录。

答案 1 :(得分:0)

至少对于Mac,在Minecraft上也会发生同样的问题。您可以通过应用程序捆绑包中的import os target_filaname = os.path.join('c:', 'Errors.csv') dferror.to_csv(target_filename, index=False) 文件强制使用Java标志。

它看起来像这样...

Info.plist

对于Windows,您可以通过启动脚本或设置</dict> </plist> <key>NSHighResolutionCapable</key> <string>YES</string> <!-- ######## ADD ONLY CONTENT BELOW THIS LINE ######## --> <key>LSEnvironment</key> <dict> <key>_JAVA_OPTIONS</key> <string>-Djava.net.preferIPv4Stack=true</string> </dict> <!-- ######## ADD ONLY CONTENT ABOVE THIS LINE ######## --> </dict> </plist> 的桌面安装程序来设置用户环境变量。

技术是从这里获取的,它提供了更详尽的解释:https://gaming.stackexchange.com/a/320864/199492

如果您尝试直接从_JAVA_OPTIONS=-Djava.net.preferIPv4Stack=true执行此操作,则需要存根以覆盖的设置检测并重新启动Java。这并非易事,但可以通过将某些Java工具与Runtime.exec(...)结合使用,并使用提供的参数来完成。

长话短说,如果您分发Java应用程序,则应该分发适当的启动器(通常是安装程序),以便可以控制这些类型的事情。