JWS是否在小程序的JAR内加载JAR?

时间:2018-10-29 18:44:03

标签: java applet java-web-start

我正在维护通过Java Web Start启动的Java applet,但对该技术我知之甚少(我们正在远离applet,但需要对其进行一些维护)。此小程序取决于某些外部JAR文件(蜡染等)。

我们使用gradle作为构建系统。我们构建一个普通的JAR和一个胖的JAR(带有com.github.johnrengelman.shadow插件),如下所示:

sourceSets {
  main {
    java {
    }
  }
}
repositories {
  flatDir {
    dirs 'lib'
  }
}
dependencies {
  compile 'commons-lang:commons-lang:2.0',
    'jargs:jargs:1.0',
    'org.apache.xmlgraphics:batik-svggen:1.7',
    'org.apache.xmlgraphics:batik-dom:1.7',
    'org.apache.xmlgraphics:batik-awt-util:1.7',
    'org.apache.xmlgraphics:batik-util:1.7',
    'org.apache.xmlgraphics:batik-xml:1.7',
    'xerces:xercesImpl:2.8.0'
}
jar {
  manifest {
    attributes  'Application-Name': project.name,
                'Permissions': 'all-permissions',
                'Implementation-Title': project.name,
                'Implementation-Version': version,
                'Main-Class': 'Foo',
                'Class-Path': configurations.compile.files.collect{ "lib/${it.name}" }.join(' ')
  }
  baseName project.name
  // include dependencies into lib dir in produced jar
  into('lib') {
    from configurations.runtime
  }
  from "README.md"
}
shadowJar {
  baseName project.name
}

gradle将JAR文件包含在主JAR的lib/文件夹中,并将它们添加到Class-Path中的MANIFEST.MF中。

该小程序可以在具有常规JAR的客户端计算机上运行,但是我不完全理解为什么。

以某种方式,当Java Web Start启动小程序时,将加载JAR文件。它们没有在JNLP文件中提及(没有<resource>),也没有类加载器(我们不使用JarRsrcLoader或类似的名称),所以我想这是因为它们在Class-Path中,但是我不确定,我还无法产生MWE。实际上,我发现的所有信息都相反(至少对于应用程序而不是小程序而言)。

有人知道是这种情况还是简单的解释/教程?

1 个答案:

答案 0 :(得分:1)

嗯,我错了。实际上,未加载JAR文件:当尝试访问需要蜡染的功能时,它会失败。这证实了我的阅读以及@eckes和@zakki的评论。

我还发现我可以简化我们的build.gradle文件。