JWS загружает JAR внутри JAR для апплетов? - PullRequest
0 голосов
/ 29 октября 2018

Я поддерживаю 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. На самом деле вся информация, которую я нашел, утверждает обратное (по крайней мере, для приложений, а не для апплетов).

Кто-нибудь знает, так ли это, или это простое объяснение / учебник?

1 Ответ

0 голосов
/ 03 ноября 2018

Ну, я был не прав. На самом деле JAR-файлы не загружаются: когда кто-то пытается получить доступ к функциональности, которая требует батик, это не удается. Это подтверждает мои показания и комментарии @eckes и @zakki.

Я также обнаружил, что могу упростить наш build.gradle файл.

...