Java JWS是否在JAR中为小程序加载JAR?

Java JWS是否在JAR中为小程序加载JAR?,java,applet,java-web-start,Java,Applet,Java Web Start,我正在维护一个通过javawebstart启动的javaapplet,但我对这项技术知之甚少(我们正在远离applet,但需要对其进行一些维护)。这个小程序依赖于一些外部JAR文件(batik等) 我们使用gradle作为构建系统。我们构建了一个普通JAR和一个胖JAR(使用com.github.johnrengelman.shadow插件),如下所示: sourceSets { main { java { } } } repositories { flatDir {

我正在维护一个通过
javawebstart
启动的javaapplet,但我对这项技术知之甚少(我们正在远离applet,但需要对其进行一些维护)。这个小程序依赖于一些外部JAR文件(batik等)

我们使用
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中
lib/
文件夹中的JAR文件,它们被添加到
MANIFEST.MF中的
类路径中

小程序在带有普通JAR的客户端计算机上工作,但我不完全理解为什么

不知何故,JAR文件是在
JavaWebStart
启动小程序时加载的。JNLP文件中没有提到它们(没有
),也没有类加载器(我们没有使用
jarsrcloader
或类似的),所以我想这是因为它们位于
类路径中,但我不确定,我还没有生成MWE。事实上,我发现的所有信息都是相反的(至少对于应用程序而言是相反的)


有人知道是这样还是一个简单的解释/教程吗?

嗯,我错了。事实上,JAR文件没有加载:当一个人试图访问需要batik的功能时,它失败了。这证实了我的阅读和@eckes和@zakki的评论


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

它使用Eclipse的
jarsrcloader
或类似的东西吗?谢谢你的回答。我已经更新了这个问题。JNLP FAQ声明没有使用类路径。因此,如果使用嵌入的lib/jar,则这要么由应用程序使用自己的类加载器完成,要么由未记录的特性完成。您是否在跟踪模式下检查了Web服务器访问日志和java控制台它实际下载了哪些文件?也许jnlp文件是使用更多资源动态生成的?@eckes感谢您的评论(我在jnlp配置中指的是相同的事实)。JNLP是手工编写的,没有更多的资源。我在源代码中没有找到任何类加载器。我已经删除了所有提到的ShadowJar和所有对
类路径的操作,并且它仍然有效。也许我遗漏了一些关于Java编译的内容。