尽我所能,我无法在本地运行JNLP文件(通过双击).这似乎是一个定位jar文件的问题,即使我相对于jnlp文件指定它也是如此.我收到以下错误:
字段<jar> href具有无效值:helloworld.jar
即使JNLP文件与helloworld.jar位于同一文件夹中,也会发生这种情况.我已经完成了搜索,这是一个一致的问题,特别是对于想要在CD上打包应用程序并使用JNLP的人.Sun提供的唯一"解决方案"是通过命令行指定代码库的能力,但这并没有多大帮助.我不明白为什么他们不假设或允许代码库是"." 或"file://." - 我在jnlp标记的codebase参数中尝试了这些类型的东西(在文件中)并且没有任何效果.
我使用JNLP文件非常方便,因为我不需要担心平台检测,本机库,甚至主要的JOGL jar文件; 我只是包含这一行,一切都为我完成:
<extension name="JOGL" href="http://download.java.net/media/jogl/builds/archive/jsr-231-2.0-beta10/webstart/jogl-all-awt.jnlp" />
Run Code Online (Sandbox Code Playgroud)
我希望找到一些可以做同样事情的东西.如果没有,我可以手动(或使用Ant)抓取JOGL jar文件,这不是什么大问题; 这只是JNLP为我做的事情之一,我真的很想念.
什么是JNLP文件的最佳替代品,让我在本地使用(即双击运行)?有什么优雅的东西,或者我只需要为Linux编写一个shell脚本,一个Windows的批处理文件,并让Ant检测并下载相应的JOGL jar?
我们有一个使用Java Web Start的Java应用程序.jnlp文件配置为[j2se version ="1.5+"].因此,如果安装了JRE 1.5和1.6,则应用程序将在1.6上运行.
现在,我们要求应将应用程序限制为仅在范围内运行 - JRE 1.5.0_07到JRE 1.5.0_17
[j2se version ="1.5*"]将无效 - 它将始终使用1.5系列中最新的jre启动应用程序.
我可以通过包含href属性来请求确切的产品版本.[j2se version ="1.5.0_14"href ="http://java.sun.com/products/autodl/j2se"/]
但是如何在jnlp文件中指定特定范围的JRE,以便JWS仅从该范围中获取JRE?因此,如果安装了1.5.0_07,1.5.0_17和JRE 6,它应该在1.5.0_17上运行应用程序.
有没有一个很好的方法来实现这一目标?
我一直试图让xcodebuild测试使用Jenkins在远程机器上工作.我遇到了无法通过SSH启动GUI的错误,并通过如下建议通过JNLP启动从站解决了这个错误: 在Xcode 6下通过SSH运行xcodebuild测试时超时.现在我收到一个新错误:
错误域= IDEUnitTestsOperationsObserverErrorDomain代码= 3"在等待测试过程签入时由于超时而取消测试..."
无论我是在终端上还是通过Jenkins成功构建和运行测试,我都会遇到这些错误:
iPhoneSimulator:SimVerifier返回:错误域= NSPOSIXErrorDomain代码= 53"模拟器验证失败." {NSLocalizedFailureReason =无法建立与模拟器验证服务的连接.,NSLocalizedRecoverySuggestion =确保在已启用所有权的卷上安装Xcode.app.,NSLocalizedDescription =模拟器验证失败.}
iPhoneSimulator:无法连接到"com.apple.instruments.deviceservice.lockdown"(错误域= com.apple.CoreSimulator.SimError代码= 146"无法在当前状态下查找:关闭"
我确保在安装了XCode的地方启用了所有权,我已经重置了模拟器上的内容和设置,并且我已将我的plist文件移动到/ Library/LaunchAgents中.我试过谷歌搜索这些错误,找不到任何与我的问题有关的东西.有没有人有任何其他建议?
其他信息:
XCode版本6.2(6C131e)
日志文件:
2015-03-24 12:14:10.719 Beginning test session with Xcode 6C131e
2015-03-24 12:14:10.720 /Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild test -project proj.xcodeproj -scheme development -destination platform=iOS Simulator,name=iPad Air
2015-03-24 12:14:10.720 Testing on device: <DVTiPhoneSimulator: 0x7f8235cb3570> {SimDevice: SimDevice : iPad Air (625C9344-19B9-4F6C-B70B-8BDD3B753E17) : state={ Booted } deviceType={ SimDeviceType : com.apple.CoreSimulator.SimDeviceType.iPad-Air } runtime={ SimRuntime : 8.2 (12D508) - com.apple.CoreSimulator.SimRuntime.iOS-8-2 }}
2015-03-24 12:14:10.720 Writing testing status log to …Run Code Online (Sandbox Code Playgroud) 我创建了一个简单的测试用例来测试Java 9 Web Start的新模块.遗憾的是,Java 9 Web Start默认情况下不支持像常规Java 9那样的--permit-illegal-access.
Java 9 Web Start假设支持--add-opens(请参阅https://bugs.openjdk.java.net/browse/JDK-8172986).
我正在使用Java 1.9.0_181_ea.
这是我的测试类:
import java.awt.Toolkit;
import java.lang.reflect.Method;
import java.lang.IllegalAccessException;
import java.lang.reflect.InvocationTargetException;
public class Java9BreaksWhenTest {
public static void main(String args[]) throws IllegalAccessException, InvocationTargetException {
System.out.println("Hello World");
// Do some dangerous reflection
Toolkit toolkit = Toolkit.getDefaultToolkit();
Class c = toolkit.getClass();
while(true) {
Method m = null;
try {
m = c.getDeclaredMethod("setDesktopProperty", String.class, Object.class);
} catch (NoSuchMethodException ex) {
c = c.getSuperclass();
if (c!=null)
continue;
} catch (SecurityException …Run Code Online (Sandbox Code Playgroud) 我正在使用kuberntes-plugin.在其自述文件中,它给出了如何使用多个容器图像编写脚本化管道
podTemplate(label: 'mypod', containers: [
containerTemplate(name: 'maven', image: 'maven:3.3.9-jdk-8-alpine', ttyEnabled: true, command: 'cat'),
containerTemplate(name: 'golang', image: 'golang:1.8.0', ttyEnabled: true, command: 'cat')
]) {
node('mypod') {
Run Code Online (Sandbox Code Playgroud)
我尝试了以下的声明性管道.
pipeline {
agent {
kubernetes {
//cloud 'kubernetes'
label 'mypod'
containerTemplate {
name 'maven'
image 'maven:3.3.9-jdk-8-alpine'
ttyEnabled true
command 'cat'
}
containerTemplate {
name 'containtertwo'
image 'someimage'
ttyEnabled true
}
}
}
Run Code Online (Sandbox Code Playgroud)
它创建一个只有一个容器的pod.
如何使用多个containerTemplates与声明管道?
根据Java web start,jar文件在客户端机器上下载了什么?
我有一个有效的JNLP应用程序,但想添加一些端到端的冒烟测试.
是否可以通过URL下载,启动和编程操作JNLP应用程序?
我们在Tomcat6上启用了基本身份验证.用户在浏览器中进行身份验证,然后启动JNLP以在Java Web Start中启动应用程序.在启动时,java web start尝试从服务器下载jar文件,但它没有使用已经过浏览器验证的同一会话.基于论坛,我试图通过使用sid属性在JNLP中传递会话ID,并在URL中附加.环境受到限制,因此每个请求都需要进行身份验证,我们不能说要排除对未经过身份验证的jar文件的请求.下面是我的JSP创建JNLP文件,任何人都可以请求帮助我们如何继续相同的会话下载已经被浏览器验证的jar.
<% response.setContentType("application/x-java-jnlp-file"); %>
<%= "<?xml version=\"1.0\" encoding=\"utf-8\"?>" %>
<!-- JNLP File for SimpleTableDemo -->
<%
String baseURL = request.getRequestURL().toString().replace(request.getRequestURI(), request.getContextPath());
%>
<jnlp codebase="<%=baseURL%>">
<information>
<title>Simple Table Demo Application</title>
<vendor>Try</vendor>
<description>SimpleTableDemo</description>
<description kind="short">An application that demonstrates a simple table.</description>
</information>
<resources>
<j2se version="1.6+" />
<property name="sid" value="<%=request.getSession().getId()%>" />
<property name="serviceHost" value="<%=request.getServerName()%>"/>
<property name="servicePort" value="<%=request.getServerPort()%>"/>
<jar href="AuthenticateJNLPJars.jar;JSESSIONID=<%=request.getSession().getId()%>" />
</resources>
<application-desc main-class="SimpleTableDemo" >
</application-desc>
</jnlp>
Run Code Online (Sandbox Code Playgroud) 在尝试根据传递给HTTP服务器的URL参数动态生成JNLP文件时,我注意到了一件奇怪的事情.如果我的HTML代码中有这样的东西,它可以工作:
<embed type="application/x-java-applet;" launchjnlp="dummy.jnlp"/>
Run Code Online (Sandbox Code Playgroud)
另一方面,如果我%在launchjnlp属性中有一个字符,插件根本不会做任何事情:
<embed type="application/x-java-applet;" launchjnlp="dummy%3f.jnlp"/>
Run Code Online (Sandbox Code Playgroud)
没有错误消息,没有默认的Java启动画面,没有,它默默地失败.(甚至没有尝试检索JNLP文件.)
这是某种安全功能吗?如果是的话,它应该防范什么?
或者它可能是一个直截了当的错误?
更新:使用%实体而不是%符号也不起作用.
更新2:我尝试但未能找到有关该launchjnlp属性的确切语义的任何文档,但整个标记由deployJava.launchWebStartApplication(jnlp)生成,这应该是从浏览器启动Web Start应用程序的"官方"方式.
更新3:只是对此非常清楚:上面的例子只是:一个例子.您可以使用绝对任何 URL(相对,绝对,file://,http://,您为其命名),任何 URL编码的字符,甚至无效的转义序列来观察所描述的行为(尽管在这种情况下它更多或不太合理),实际JNLP文件的存在与否是无关紧要的,因为我们甚至没有达到插件试图加载JNLP文件的程度.
通过将--permit-illegal-access标志传递给VM,我使用JRE build 9-ea + 163运行我的应用程序.现在我想用Java Webstart启动应用程序.第一次尝试
javaws -J--permit-illegal-access <JNLP-Url>
Run Code Online (Sandbox Code Playgroud)
不起作用.我得到同样InaccessibleObjectException有module java.base does not "opens java.util" to unnamed module因为没有国旗.
添加<j2se java-vm-args="--permit-illegal-access" version="9*"/>到JNLP没有帮助.
Webstart支持--permit-illegal-access旗帜吗?
我还可以在JNLP文件中指定标志吗?
顺便说一句,Java 9
javaws https://docs.oracle.com/javase/tutorialJWS/samples/deployment/NotepadJWSProject/Notepad.jnlp
Run Code Online (Sandbox Code Playgroud)
投掷IllegalAccessException,-J--permit-illegal-access也没有帮助.
PS:将env变量设置JAVA_TOOL_OPTIONS为--permit-illegal-access有效,但由于无法访问客户端,因此不是解决方案.