当我从jnlp启动应用程序时,我收到消息
" Missing Codebase manifest attribute for:xxx.jar"
这是什么意思?
直到最近,我才能够使用Java web start在Firefox中启动/打开JNLP文件.
不知道突然发生了什么JNLP文件停止启动,出现了一个启动画面,说Java Starting ...然后没有任何反应.甚至浏览器中的Java控制台和javacpl.cpl小程序也无法打开.
尝试了所有可能性:删除所有旧版本并安装了最新的JRE(java版本"1.6.0_17"),但它仍然无效.
做了一些谷歌搜索这个问题,人们建议使用-viewer选项启动javaws.exe但行为相同(启动画面显示"Java Starting ..."然后消失)
问题是我不知道任何地方(日志等)要查找导致问题的原因.
我正在使用WinXP SP3,下面的一些屏幕截图显示了有关我的系统的更多信息.如果需要,我可以提供任何其他细节,但请帮我解决这个问题.
我的公司为服务器生成Java应用程序并提供JNLP文件以启动本地应用程序.从OSX 10.8.4开始,需要使用开发者ID对JNLP文件进行签名,以保持Gatekeeper的满意度(实际上它位于最底层的发行说明中).
问题是:如何实现这一目标?AFAIK你可以签署应用程序(我们有一些使用开发者ID签名的Java应用程序) - 但JNLP - 文件只是:文件.
下一步:如何使用生成的JNLP文件执行此操作.我们必须修改它们来自服务器 - 例如属性,基本URL等等.
AFAIK Java有一定的机制可以说JNLP文件是通过它们各自的JAR文件(持有主类的文件)签署的 - 但是:Jar文件使用不同的证书进行签名,它们也不会满足Gatekeeper.
我确实找到了一个关于如何签署工具和东西的参考,但它不适用于动态文件的场景.
我不想要的答案:右键单击并打开以覆盖关守或更改系统或Java设置.这不是一个选择.
[更新]自OSX 10.9.5起,您还必须使用OSX 10.9+进行签名并拥有有效的版本2签名.怎么做?
对于我的JNLP文件,有一些nativelib信息,如下所示:
<resources os="Windows">
<nativelib href="lib/x264-win.jar" />
</resources>
<resources os="SunOS" arch="sparc">
<nativelib href="lib/x264-SunOS-sparc.jar" />
</resources>
<resources os="SunOS" arch="x86">
<nativelib href="lib/x264-SunOS-x86.jar" />
</resources>
Run Code Online (Sandbox Code Playgroud)
当我更新到JRE7时,无法加载nativelib jar,但JRE6工作正常.
加载nativelib代码如下:
String source = "x264.jar";
ClassLoader cl = Thread.currentThread().getContextClassLoader();
URL url= cl.getResource(source);
Run Code Online (Sandbox Code Playgroud)
"x264.jar"是x264-win.jar中的一个jar,lib/x264-SunOS-sparc.jar或lib/x264-SunOS-x86.jar.
当我使用JRE6加载x264.jar时,它工作正常.但是当我更新到JRE7时,它无法加载x264.jar.
当使用JRE6时,url将是"x264.jar"信息,如jar:http://test.local:8080/JNLP.jar!/x264.jar,但是使用JRE7,url将为null,我发现代码不是加载nativelib"x264.jar"
有没有人发现JRE7无法加载nativelib.jar?是使用Thread.currentThread().getContextClassLoader()加载"x264.jar"的问题?
我一直在尝试验证Jar签名:
jarsigner -verify -verbose -certs example.jar
Run Code Online (Sandbox Code Playgroud)
我遇到了以下问题:
jarsigner: java.lang.SecurityException: invalid SHA1 signature file digest for o
rg/apache/log4j/net/DefaultEvaluator.class
Run Code Online (Sandbox Code Playgroud)
我有一些关于使用的建议,-digestalg SHA-1但我不知道我应该在哪里发表这个声明!
我希望你能帮我解决问题.
用户正在运行从浏览器启动的JNLP应用程序.JNLP启动的*.jar文件由受信任的CA颁发的证书签名.
启动jar文件时,会向用户询问是否信任签名者(不是CA - CA已经信任).
如果用户说"是",则将签名者的证书添加到信任存储区.
问题是:同一个对话框再次显示的条件是什么?
即使在用户最初选中" 不再显示此项 "复选框后,其中哪些(或其他?)将触发对话框显示?
jar文件在哪里缓存用于Java Web Start/JNLP应用程序?
在浏览器中下载JNLP后,它会被缓存,因此不需要再次下载,这很好.但是,因此,如果我更新JNLP使用的JAR,用户仍将看到缓存中的旧版本应用程序.
您可以通过在终端中运行它来清除缓存:
javaws -uninstall
Run Code Online (Sandbox Code Playgroud)
但很明显,当您的更新准备就绪时,用户无法运行此命令.它应该比这更无缝.
一个想法是更改jnlp文件名,以便下载新文件,如MyJWS-01.jnlp,以包含版本号.
还有其他方法吗?
自从我们安装了Java 1.7.0u45以来,我们的WebStart应用程序显示了Windows系统启动时的一个主要延迟(我们还没有尝试过其他平台).
症状是双击桌面上的应用程序图标后,启动画面快速显示,停留一段时间(如之前所做)并关闭.在此之后我们有大约1分钟的延迟.然后,最后,应用程序窗口打开,一切都像魅力一样.
我们的应用程序在Java 1.7.0u25之前没有遇到任何问题.Java 1.7.0u40是问题出现的第一个版本.
我们的应用程序由单个(可执行)jar文件构成.最常见的部分是jar中的一些用于串行端口访问的本机类.我在这篇文章的末尾添加了jnlp文件.
我们试图找出延迟的原因是什么:
经过了Java Webstart的发行说明在http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/enhancements-7.html我们的版本.
我们可以说,没有什么可以导致这种行为.我们注意到有新的Manifest条目(Permissions,Codebase,Application-Name).这些都被添加了.
看着谷歌和stackoverflow.
有些似乎有类似的问题,但我们从未见过解决方案.在许多情况下,人们在下载jar文件和重复下载时遇到问题.这似乎不是我们的问题.
使用坚韧的工具
我们想知道应用程序在上述时间内的作用.所以我们使用了sysinternals和wireshark中的进程资源管理器和进程监视器.我们发现在等待时间内,该过程尝试通过IP与'vip1.g-anycast1.cachefly.net'(205.234.175.175)和93.184.220.29进行通信.后者似乎是一个证书服务器,我真的不明白cachefly是什么东西.在这两种情况下,我们都会看到TCP syn,但没有答案,没有进一步的沟通.这两个地址都是可以ping的.
与IP-stuff无关:我们确定,应用程序没有下载,而是从缓存开始,并且我们的主要是在延迟之后调用,而不是之前.
这就是我们陷入困境的地方
任何进一步的想法如何解决这个?我们是唯一经历过这种行为的人吗?
Jnlp(请注意,手动重新设置网址):
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="6.0+" codebase="http://53.48.16.33:8180/jenkins/job/TcuTerm%20-%20Deploy/lastSuccessfulBuild/artifact/5000_Construction/5100_Code_Base/TcuTerm/antlocal" >
<information>
<title>TcuTerm</title>
<vendor>Development</vendor>
<icon href="http://53.48.16.33:8180/jenkins/job/TcuTerm%20-%20Deploy/lastSuccessfulBuild/artifact/5000_Construction/5100_Code_Base/TcuTerm/src/com/x/tcu/app/term/resources/tcu.jpg"/>
<icon kind="shortcut" href="http://53.48.16.33:8180/jenkins/job/TcuTerm%20-%20Deploy/lastSuccessfulBuild/artifact/5000_Construction/5100_Code_Base/TcuTerm/src/com/x/tcu/app/term/resources/tcu.jpg"/>
<icon kind="splash" href="http://53.48.16.33:8180/jenkins/job/TcuTerm%20-%20Deploy/lastSuccessfulBuild/artifact/5000_Construction/5100_Code_Base/TcuTerm/src/com/x/tcu/app/term/resources/splash.jpg"/>
<homepage href="https://confluence.detss.corpintra.net/display/TCU/TcuTerm"/>
<offline-allowed/>
<shortcut>
<desktop/>
<menu submenu="TcuTerm"/>
</shortcut>
</information>
<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.6+" href="http://java.sun.com/products/autodl/j2se"/>
<jar href="TcuTerm.jar" main="true"/>
</resources>
<application-desc main-class="com.x.tcu.app.term.TcuTerminal"/>
<update check="timeout"/>
</jnlp>
Run Code Online (Sandbox Code Playgroud) 我正在启动一个突然关闭的Java Web Start应用程序.有没有人知道如何访问Java Web Start的日志.是否有任何已知原因导致其突然关闭?