我正在维护通过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。实际上,我发现的所有信息都相反(至少对于应用程序而不是小程序而言)。
有人知道是这种情况还是简单的解释/教程?
答案 0 :(得分:1)
嗯,我错了。实际上,未加载JAR文件:当尝试访问需要蜡染的功能时,它会失败。这证实了我的阅读以及@eckes和@zakki的评论。
我还发现我可以简化我们的build.gradle
文件。