JNLP应用启动失败求助:无法加载Scanner.jar资源
排查并解决JNLP启动的FailedDownloadException异常
首先,这个异常的核心问题是Java Web Start(JWS)无法从指定URL加载Scanner.jar等资源,我们可以从以下几个关键方向逐一排查:
1. 优先核对文件名与JNLP配置的大小写一致性
这是最常见的坑!你错误提示里提到的是Scanner.jar,但你的JNLP文件里写的是scanner.jar(小写s)。在Linux/Unix服务器上,文件路径是大小写敏感的,哪怕只差一个字母,JWS都会返回404无法加载。
解决方法:
- 检查服务器上
http://localhost:8080/openmrs/moduleResources/muzimabiometrics/目录下的实际文件名:如果是Scanner.jar,就把JNLP里的<jar href="scanner.jar" main="true"/>改成<jar href="Scanner.jar" main="true"/>;如果实际是小写的scanner.jar,那要确认错误提示里的路径是不是拼写错误。
2. 验证资源的可访问性
手动用浏览器或者curl命令访问每个JNLP里的jar URL,比如:
curl http://localhost:8080/openmrs/moduleResources/muzimabiometrics/Scanner.jar curl http://localhost:8080/openmrs/moduleResources/muzimabiometrics/Jlibfprint.jar
如果某个URL返回404错误,说明:
- 该jar文件不存在于指定目录
- 服务器路径配置错误(比如OpenMRS模块的资源目录映射不对)
- 服务器权限限制(比如Tomcat用户没有读取该文件的权限)
3. 完善JNLP文件的基础配置
你的JNLP文件有两个可以优化的点,能避免路径解析问题:
href属性为空:建议明确指定JNLP文件名,比如href="scanner.jnlp",这样JWS能更准确地基于codebase解析资源路径- 确认
codebase的正确性:确保末尾的斜杠/存在,否则资源路径会拼接错误(比如变成muzimabiometricsscanner.jar)
修正后的JNLP示例(假设实际文件名是Scanner.jar):
<?xml version="1.0" encoding="UTF-8"?> <jnlp spec="1.0+" codebase="http://localhost:8080/openmrs/moduleResources/muzimabiometrics/" href="scanner.jnlp"> <information> <title>Web start</title> <vendor>Muzima Team</vendor> <offline-allowed/> </information> <resources> <j2se version="1.6+" href="http://java.sun.com/products/autodl/j2se"/> <jar href="Scanner.jar" main="true"/> <jar href="Jlibfprint.jar" /> <jar href="httpcore-4.4.4.jar" /> <jar href="httpclient-4.5.2.jar" /> <jar href="commons-logging-1.2.jar" /> <jar href="commons-codec-1.9.jar" /> </resources> <security> <all-permissions/> </security> <application-desc main-class="org.openmrs.module.muzimabiometrics.ScanFingerprint"> </application-desc> <update check="background"/> </jnlp>
4. 清理Java Web Start缓存与检查安全设置
有时候缓存会导致资源加载异常,或者安全级别过高阻止访问:
- 打开Java控制面板 → 「临时Internet文件」→ 「设置」→ 「删除文件」,清空缓存后重新尝试启动
- 如果Java安全级别设置为高,把
http://localhost:8080添加到「例外站点列表」,因为JNLP请求了all-permissions权限,需要信任该站点
5. 检查服务器的资源访问权限
确保运行OpenMRS的服务器(比如Tomcat)用户拥有读取muzimabiometrics目录下所有jar文件的权限,同时确认OpenMRS模块的资源映射配置正确,没有拦截这些jar文件的访问。
内容的提问来源于stack exchange,提问作者enock tum




