好的,这是我第一次尝试Java web start,所以我有了用Maven构建的jar作为依赖项存储库,并将其放入Apache根文件夹,包括文件夹库中的所有依赖项jar,然后我创建了密钥存储、HTML和JNLP文件。
我启动了Apache服务,并尝试访问localhost,它运行得很顺利,直到我用浏览器的java插件运行了jnlp文件,NoClassDefFoundError
显示,我知道我的依赖项JAR不包括在内。所以我发现了如何在JavaWebStart项目中包含jar依赖项——公认的答案对我来说不适用,我不知道我做错了什么?
这是我的JNLP文件:
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="http://localhost/transactionSimulator2" href="launch.jnlp">
<information>
<title> Transaction Simulator</title>
<vendor> Daksa </vendor>
<homepage href=""></homepage>
<description>Transaction Simulator </description>
<description kind="short">Transaction Simulator</description>
<offline-allowed/>
</information>
<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.6+"/>
<jar href="TransactionSimulator-1.0-SNAPSHOT.jar" main="true" download="eager"/>
<target name="signLibs">
<signjar destDir="lib" alias="yusufNugraha" keystore="testKeys"
storepass="yusufnugraha" force="true" >
<path>
<fileset dir="lib" includes="*.jar" />
</path>
</signjar>
<echo message="Library files were signed."/>
</target>
</resources>
<application-desc main-class="com.daksa.transactionsimulator.ui.MainFrame">
</application-desc>
</jnlp>
您可以使用uberjar,其中所有库都被提取到一个更大的jar文件中。在这种情况下,只有文件要处理。Maven中的maven-依赖-插件可以为您做到这一点。它会自动获取所有依赖项,所以这很重要。我正在将这个汇编文件与插件一起使用:
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
<id>jar-with-dependencies</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<outputDirectory>/</outputDirectory>
<useProjectArtifact>true</useProjectArtifact>
<unpack>true</unpack>
<scope>runtime</scope>
</dependencySet>
</dependencySets>
</assembly>
您还必须对jar进行签名才能(在浏览器中)执行应用程序。
注意:如果您使用的是像Bouncy Castle这样的加密提供程序,当您将此jar包含在uberjar中时,加密提供程序的签名会被破坏。在这种情况下,您必须将其作为附加jar添加为资源
元素中的扩展
。
在程序集文件中,您必须在dependencySet
元素中排除此项,例如:
<excludes>
<exclude>org.bouncycastle:bcprov-jdk15on</exclude>
</excludes>
扩展JNLP如下所示:
<jnlp spec="1.0" href="bouncyCastle.jnlp">
<information>
<title>Bouncy Castle</title>
<description>Bouncy Castle Crypto Provider</description>
</information>
<security>
<all-permissions/>
</security>
<resources>
<jar href="https://www.bouncycastle.org/download/bcprov-jdk15on-152.jar"/>
</resources>
<component-desc />
</jnlp>
在这种情况下,您必须使用与主jar相同的密钥对jar进行反签名。否则,延期将被拒绝。出于某种原因,您必须使用相同的摘要算法来避免验证错误。
包含jar库的正确方法是:
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="http://localhost/transactionSimulator2" href="launch.jnlp">
<information>
<title> Transaction Simulator</title>
<vendor> Daksa </vendor>
<homepage href=""></homepage>
<description>Transaction Simulator </description>
<description kind="short">Transaction Simulator</description>
<offline-allowed/>
</information>
<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.6+"/>
<jar href="TransactionSimulator-1.0-SNAPSHOT.jar" main="true" download="eager"/>
<jar href="lib/file1.jar"/>
<jar href="lib/file2.jar"/>
<jar href="lib/file3.jar"/>
<jar href="lib/file4.jar"/>
<jar href="lib/file5.jar"/>
</resources>
<application-desc main-class="com.daksa.transactionsimulator.ui.MainFrame">
</application-desc>
问题内容: 我在Eclipse中有一个对我的工作区中的另一个Java项目有依赖性的对象。在内置的Tomcat服务器中运行Web项目时,我已将项目依赖项添加到 运行配置中 的类路径中。我想创建一个WAR,用于在外部服务器上部署Web项目。依赖性Java项目已添加到Eclipse中的 Java Build路径 ,但是当我导出WAR文件时,该库不包括在内。还可以在 Order and Export中 选
我有一个maven项目,它被配置为(通过使用pom.xml和assembly.xml)在运行时打包一个zip文件,该文件包含编译后的webapp(war文件)和src/main/文件夹下的所有文件。 这个项目导入/使用另一个maven项目(它变成了一个jar文件),而该项目反过来也导入/使用第三个maven项目(同样是一个jar文件)。 第三个项目还包含src/main/文件夹中的一些文件,我希望
我写了一些库,其中有一部分UI。此外,这个库使用另一个库。我想提供发行版来在任何应用程序中使用这部分UI。 我得库有下一个依赖项: /home/user/projects/mainapp/app/build/intermediates/explodede-aar/com.my.sdk/sdk/0.0.1/res/values/values.xml:78:21-29:找不到与给定名称匹配的资源:at
我们正在尝试使用java webstart开发一个打印应用程序。我们使用eclipse将jar创建为普通jar文件。我们的应用程序需要外部库来连接数据库、将数据转换为字节等。 我们以前可以通过将必要的JAR放入jre文件夹的/ext/目录来实现这一点。然而,这导致了与tomcat服务器的库冲突,所以我们希望避免这种方法。 我们还尝试将项目导出为可运行的jar,因为所需的库也已打包在jar中。但是当
我正在开发一个Java项目,使用maven作为依赖项管理器/构建工具。我当前在将依赖项的依赖项解析到正确版本时遇到问题。 有问题的依赖项称为JasperReports-Functions-6.1.0.jar,它不是托管在maven repo中,而是以jar形式提供的。 如何强制jar依赖项使用子依赖项的某个版本?
问题内容: 摘要: 我有一个依赖于JAR文件的AAR文件,当我构建AAR项目时,它不包含JAR代码。 细节: 我有一个Java SDK库项目,其中包含我们用于Java Web项目的代码,此类库是使用内部Nexus服务器(如JAR)创建的,并驻留在内部。 目的是通过一个AAR库提供此JAR库的“ Android配置”版本,多个Android应用程序可以使用该版本,并最大程度地减少了实现它的工作量(和