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编译的内容。