有人知道在 JNLP 文件中指定什么,以便不会一直下载 JARS,而只有在服务器端有新版本时才下载吗?我知道我可以指定:version="1.5" 完全是 1.5 版,或 version="1.6+" 1.6 或更高版本。
让我们以 version="1.6+" 为例。如果用户使用 1.7 版本,则不会下载 JAR,即使在服务器上 JAR 不断更新到 1.8、1.9 等等...我希望下载 JAR,但仅当服务器上有新版本时边。这能做到吗?
谢谢,特奥
我有一个 Maven 项目,它将 Swing 客户端构建为 jar-with-dependencies.jar 文件。我想使用 Java Web Start 来分发这个 my.gui-0.1.0-jar-with-dependencies.jar 文件。为此,我创建了一个单独的 Maven 项目,该项目使用 JNLP 工件构建了一个 .war 文件。我需要在这个 .war 文件中包含 my.gui-0.1.0-jar-with-dependencies.jar。
我无法确定 jar-with-dependencies.jar 文件的 Maven 坐标。如果我将 Maven 坐标用于 GUI 项目,它会将 GUI 项目的依赖 .jar 文件放在 WEB-INF/lib 中,这不是我想要的。我需要在 .war 文件中包含 my.gui-0.1.0-jar-with-dependencies.jar 文件本身。(我想它可能在 WEB-INF/lib 中。)
我如何告诉 Maven 依赖项是 jar-with-dependencies.jar 文件本身?
如果除了告诉 Maven 包含 jar-with-dependencies.jar 本身的机制之外,还有另一种方式也可以工作。jar-with-dependencies.jar 必须位于我为支持 Java Web Start 而创建的 .war 文件中。
我知道有一个 Maven Webstart 插件,但这看起来像是一场噩梦,所以我只是自己构建一个 .war 文件,其中包含必要的 JNLP 工件。
目前我有一个使用 Java web start 通过 JNLP 运行的应用程序。用户可以点击一个特定的 URL 并启动这个应用程序就好了。
通过使用 j2seproperty 标记,我可以在 build.xml(ant web start)内向 JNLP 文件本身添加属性,例如这个。
<jw:j2se>
<j2seproperty name="testProperty" value="1"/>
</jw:j2se>
并且可以通过以下方式在代码中的任何位置访问这些属性:
System.getProperty("testProperty");
问题是我希望能够通过 html 设置这些属性,如下所示。
'http://localhost:8080/somelink?testProperty=2'
我有哪些选择来实现这一目标?我已经做了一些研究,到目前为止,似乎唯一的解决方案是以某种方式通过某种 servlet 动态创建 JNLP 启动器。
这是正确的,如果不正确,这里还有其他选择吗?如果是这样,我愿意接受所有可能性......
我们有一个 Java 应用程序,我们的客户可以通过 webstart 启动它。我们有一些可用性问题:
在 jnlp 文件的链接上最多点击一百次,“chrome”只是下载 jnlp 文件,以增量方式命名它:index(1).jnlp、index(2).jsp 等,然后启动应用程序。但是在下载 100 次后,当用户点击链接时,chrome 会打开一个“另存为”对话框。然后用户点击保存;chrome 询问“此文件已存在,您真的要替换它吗?” 用户说是,Chrome 下载 jnlp 等。
这个过程会产生可用性问题。为了避免它,我们开始定期更改 jnlp 文件的名称。但是当用户第一次点击新的 jnlp 链接时,chrome 会询问“这种类型的文件会损害您的计算机。您是否要保留 .......jnlp 呢?” 在下载文件之前。这创建了单击另一个按钮的另一个步骤。当然,它会吓到用户。
尽管 chrome 对这个问题的处理有问题,但 Firefox 顺利地在 100 之后继续增加文件名编号。
我们如何用 chrome 解决这个问题,而不要求用户在他们的电脑上做一些复杂的调整?
我们有一个已签名的 Java 应用程序,它通过 Java WebStart 分发给客户端,但从 1.8_031 开始,我们有时会看到 NPE。使用Java 1.8_031或更早版本,该应用程序始终有效。同一台机器有时可以运行应用程序,有时不能。清除缓存对此没有影响。
JNLP 文件如下所示:
<?xml version="1.0" encoding="utf-8"?>
<!--
Java Webstart JNLP File for ESKORT Clearance Workbench Application
$Id: cwb.jnlp.template,v 1.26.2.9.2.1 2015/05/19 12:43:03 PB Exp $
-->
<jnlp codebase="http://T500-DASIM:6610/clearance" href="cwb.jnlp" spec="6.0+">
<information>
<title>ESKORT Clearance Workbench 4.0.0.33</title>
<vendor>Copyright © 2014 Intrasoft International Scandinavia A/S. All rights reserved.</vendor>
<homepage href="http://www.intrasoft-intl.com/eskort"/>
<description>ESKORT Clearance Workbench 4.0.0.33</description>
<description kind="short">Client application for modifying the ESKORT Clearance Risk Analysis Configuration.</description>
<icon href="conf/ClearanceWorkbench64.jpg"/>
<icon href="conf/ClearanceWorkbenchSplash.jpg" kind="splash"/>
<related-content href="http://www.intrasoft-intl.com/eskort"/>
<!--offline-allowed/--> …Run Code Online (Sandbox Code Playgroud) java平台从Oracle的jdk8切换到openjdk,现在无法构建maven项目。
Could not find artifact javax.jnlp:jnlp-api:jar:8.0 at specified path /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/javaws.jar
Run Code Online (Sandbox Code Playgroud)
切换回 oracle jdk8 允许构建继续。
我在哪里可以找到用于 openjdk 8 的 jnlp-api?有可用的POM吗?
我有一个 JNLP 文件,通常我会使用控制台(Linux)执行并且工作完美。
javaws launch.jnlp
Run Code Online (Sandbox Code Playgroud)
但现在我必须从Java代码运行,我尝试了这个......
Process p = Runtime.getRuntime().exec(new String[]{"path/to/.jnlp"});
p.waitFor();
Run Code Online (Sandbox Code Playgroud)
不工作,因为它应该运行。
Oracle 建议使用该JnlpDownloadServlet 示例从 Web 应用程序启动 JNLP。
无论出于何种原因,我无法使用它,并且必须编写自己的 JNLP 启动代码。
这就是我想出的(启动它的 Servlet):
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
performTask(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
performTask(request, response);
}
private void performTask(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
response.setContentType("application/x-java-jnlp-file");
byte [] b = getJNLP(..some params..).getBytes();
response.setContentLength((int) b.length);
OutputStream responseOutputStream = response.getOutputStream();
responseOutputStream.write(b);
}
Run Code Online (Sandbox Code Playgroud)
getJNLP是一种将整个 JNLP 文件作为String.
这似乎工作正常。但我错过了什么吗?是否有任何额外的标题等需要设置?
更新:我不使用 JnlpDownloadServlet 的原因是,我必须从 2 个不同的 Web 应用程序启动此 JNLP - …
我正在尝试通过 JNLP 通过命令行启动我的 Jenkins slave,以便我可以将命令放入任务调度程序中。但是,只有当我将 -secret 选项与 Jenkins 生成的密钥一起使用时,我才会面临身份验证问题。如果我使用与 Jenkins 相同的用户名密码传递 -auth 选项,则工作正常。
java -jar slave.jar -jnlpUrl http://<jenkins host>:<port>/jenkins/computer/<Slave name>/slave-agent.jnlp -secret <secret_key> -workDir "C:\Jenkins\Robot"
Run Code Online (Sandbox Code Playgroud)
注意:我尝试执行的命令是从 Jenkins 页面复制的。
它给出以下错误:
org.jenkinsci.remoting.engine.WorkDirManager initializeWorkDirINFO: Using C:\Jenkins\Robot\remoting as a remoting work directory Both error and output logs will be printed to C:\Jenkins\Robot\remoting Not use http_proxy property or environment variable which is invalid: unknown protocol: one.proxy.att.com Failing to obtain http://<host:port>/jenkins/computer/<job>/slave-agent.jnlp?encrypt=true
java.io.IOException: Failed to load http://<host:port>/jenkins/computer/<job>//slave-agent.jnlp?encrypt=true: 401 Unauthorized
at hudson.remoting.Launcher.parseJnlpArguments(Launcher.java:485)
at hudson.remoting.Launcher.run(Launcher.java:316)
at hudson.remoting.Launcher.main(Launcher.java:277)
Waiting 10 seconds …Run Code Online (Sandbox Code Playgroud) 由于以下原因,当前在我的一些 Jenkins slave 上运行的所有 Jenkins 作业时不时地失败:
java.nio.channels.ClosedChannelException
at org.jenkinsci.remoting.protocol.NetworkLayer.onRecvClosed(NetworkLayer.java:154)
at org.jenkinsci.remoting.protocol.impl.NIONetworkLayer.ready(NIONetworkLayer.java:179)
at org.jenkinsci.remoting.protocol.IOHub$OnReady.run(IOHub.java:721)
at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
问题只发生在一些奴隶身上,所以这不是主人的问题,我想......
在詹金斯奴隶日志中,我得到了这个:
JNLP agent connected from xxxx
Slave.jar version: 3.7
This is a Windows agent
just before slave SLAVE01 gets online ...
executing prepare script ...
setting up slave SLAVE01 ...
slave setup done.
Agent successfully connected and online
ERROR: Connection terminated
[8mha:////4JmhQISHGLISGlsTHOZXEPbCK6pxtJiroBix+jLdfCfh/YKcSsnpDAAAAVx+LCAAAAAAAA98nsLuhNKKmjNKU4P08vOT+vODjuha&SHllHSE4tKMnMz/PLL0mV3NWzufebKBsTA0NFEYMUmgZnCA1SyAABjKpSSsdxNaiYAAAAA==[0mjava.nio.channels.ClosedChannelException
at org.jenkinsci.remoting.protocol.NetworkLayer.onRecvClosed(NetworkLayer.java:154)
at org.jenkinsci.remoting.protocol.impl.NIONetworkLayer.ready(NIONetworkLayer.java:179)
at org.jenkinsci.remoting.protocol.IOHub$OnReady.run(IOHub.java:721)
at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown …Run Code Online (Sandbox Code Playgroud)