如何在JNLP参数中使用变量、传值及复用缓存JAR文件
关于javaws传递参数与使用缓存JAR的问题
咱拆解成两个问题来逐个解答:
1. 能否通过javaws命令行给JNLP里的db_port变量传值?
答案是可以实现,但要注意方式——javaws本身不会自动替换JNLP文件<argument>标签里的变量文本,但有两种可行思路:
- 让应用直接读取命令行参数:当你执行
javaws /path/to/sample.jnlp 31022时,31022会作为额外参数传递给Java应用main方法的args数组。如果你的JNLP里的<application-desc>已定义<argument>db_port</argument>,那args数组会是["db_port", "31022"];如果没定义任何<argument>,args[0]就是31022。你只需要在应用代码里读取对应的数组元素,把它作为db_port的值使用即可。 - 预处理JNLP文件:如果你希望JNLP里的
<argument>直接是具体端口值,可以手动或用脚本把JNLP里的<argument>db_port</argument>替换成<argument>31022</argument>,再执行javaws命令。这种方式适合需要固定参数的场景。
2. 能否使用缓存目录里的已下载JAR包?
完全可以!Windows下AppData\LocalLow\Sun\Java\Deployment\cache里的JAR就是javaws为你的应用下载的依赖包,你可以直接利用它们:
- 定位对应JAR:缓存目录按版本、哈希值等命名,你需要找到属于你的应用的所有JAR文件(可通过文件名、修改时间或JNLP里的JAR名称匹配)。
- 直接运行应用:把这些JAR收集起来,用标准
java命令运行,比如:
这里需要你知道应用的主类全名(可从JNLP的java -cp "cache-jar1.jar;cache-jar2.jar;..." com.yourapp.Main 31022<application-desc main-class="xxx">里找到),且要确保所有依赖JAR都包含在类路径中。 - 注意事项:缓存里的JAR可能会被javaws自动清理(比如缓存过期、手动清理操作),如果要长期使用,建议把这些JAR复制到自己的固定目录,避免依赖不稳定的缓存路径;另外,如果应用依赖native库或其他资源,也要从缓存里找到对应文件并配置好运行环境。
内容的提问来源于stack exchange,提问作者thathashd
相关产品推荐
相关产品推荐

