Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用JNLP文件包含依赖项jar?_Java_Maven_Jar_Java Web Start - Fatal编程技术网

Java 如何使用JNLP文件包含依赖项jar?

Java 如何使用JNLP文件包含依赖项jar?,java,maven,jar,java-web-start,Java,Maven,Jar,Java Web Start,好的,这是我第一次尝试JavaWebStart,所以我有了用Maven构建的jar作为依赖项存储库,并将其放入Apache根文件夹,包括文件夹库中的所有依赖项jar,然后我创建了密钥存储、HTML和JNLP文件 我启动了Apache服务,并尝试访问localhost,它一直运行顺利,直到我使用浏览器的java插件运行jnlp文件,NoClassDefFoundError显示,我知道我的依赖项JAR不包括在内。所以我发现被接受的答案对我不起作用,我不知道我做错了什么 这是我的JNLP文件: 事务

好的,这是我第一次尝试JavaWebStart,所以我有了用Maven构建的jar作为依赖项存储库,并将其放入Apache根文件夹,包括文件夹库中的所有依赖项jar,然后我创建了密钥存储、HTML和JNLP文件

我启动了Apache服务,并尝试访问localhost,它一直运行顺利,直到我使用浏览器的java插件运行jnlp文件,
NoClassDefFoundError
显示,我知道我的依赖项JAR不包括在内。所以我发现被接受的答案对我不起作用,我不知道我做错了什么

这是我的JNLP文件:


事务模拟器
达克萨
事务模拟器
事务模拟器

包含jar库的正确方法是:


事务模拟器
达克萨
事务模拟器
事务模拟器

包含jar库的正确方法是:


事务模拟器
达克萨
事务模拟器
事务模拟器

您可以使用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>
扩展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>

弹跳城堡
Bouncy Castle加密提供程序

在这种情况下,您必须使用与主jar相同的密钥对jar进行反签名。否则,将拒绝扩展。出于某种原因,您必须使用相同的摘要算法以避免验证错误。

您可以使用uberjar,其中所有LIB都被提取到一个更大的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>
扩展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>

弹跳城堡
Bouncy Castle加密提供程序

在这种情况下,您必须使用与主jar相同的密钥对jar进行反签名。否则,将拒绝扩展。出于某种原因,您必须使用相同的摘要算法以避免验证错误。

jnlp
文件中
target
元素在做什么?检查结构
target
元素在
jnlp
文件中做什么?检查结构在我有这么多依赖项之前它是可以接受的,我的意思是它没有效率,我必须在jnlp中多次添加
,还有其他选择吗?如果您担心为JAR编写所有这些行的“效率低下”,请为每个实际需要下载这些JAR的客户端考虑一下!在JavaWebStart jnlp中,如果不为每个jar文件指定确切的文件名和路径,则无法导入jar文件。例如,不能使用lib/*.jar。你有多少jar文件?您可以编写一个脚本,通过遍历文件夹中的所有文件并将它们逐个添加到jnlp来生成jnlp文件。正如Andrea所说,请注意,如果您有太多的jar文件,那么客户端下载它们的速度可能会太慢。这不起作用,它会给出错误消息,因为jar资源没有使用相同的证书签名。这是显而易见的,因为第三方jar将由各自的人签名。您必须使用您的证书对jar文件进行签名,这样才能工作。在我有这么多依赖项之前,这是可以接受的,我的意思是这不是有效的,我必须在jnlp中多次添加
,还有其他选择吗?如果您担心为JAR编写所有这些行的“效率低下”,请为每个实际需要下载这些JAR的客户机考虑一下!在JavaWebStart jnlp中,如果不为每个jar文件指定确切的文件名和路径,则无法导入jar文件。例如,不能使用lib/*.jar。你有多少jar文件?您可以编写一个脚本,通过遍历文件夹中的所有文件并将它们逐个添加到jnlp来生成jnlp文件。正如Andrea所说,请注意,如果您有太多的jar文件,那么客户端下载它们的速度可能会太慢。这不起作用,它会给出错误消息,因为jar资源没有使用相同的证书签名。这是显而易见的,因为第三方jar将由各自的人签名。您必须使用证书对jar文件进行签名,这样才能工作。