Я поддерживаю Java-апплет, запущенный с помощью Java Web Start
, но я мало знаю об этой технологии (мы находимся в процессе перехода от апплетов, но нам нужно некоторое обслуживание для нее). Этот апплет зависит от некоторых внешних файлов 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 в папке lib/
внутри основного JAR, и они добавляются в Class-Path
в MANIFEST.MF
.
Апплет работает на клиентских компьютерах с обычным JAR , но я не до конца понимаю, почему.
Каким-то образом JAR-файлы загружаются, когда Java Web Start
запускает апплет. Они не упомянуты в файле JNLP (нет <resource>
), и загрузчик классов отсутствует (мы не используем JarRsrcLoader
или аналогичный), так что я думаю, это потому, что они находятся в Class-Path
, но я не уверен, и я не смог произвести MWE. На самом деле вся информация, которую я нашел, утверждает обратное (по крайней мере, для приложений, а не для апплетов).
Кто-нибудь знает, так ли это, или это простое объяснение / учебник?