У меня проблема: мне нужно добавить ${java.home}/lib/deploy.jar
файл JAR в classpath во время выполнения (динамически из java).
- Решение с
Thread#setContextClassLoader(ClassLoader)
(упомянутое здесь ) не работает из-за этой ошибки (если кто-то может объяснить, что действительно является проблемой - милости просим).
- Решение с
-Xbootclasspath/a:"%JAVA_HOME%/jre/lib/deploy.jar"
не работает для меня, потому что я хочу иметь «чистый исполняемый файл jar» в качестве конечного результата: пожалуйста, никаких сценариев переноса (больше, чем %JAVA_HOME%
, может не определяться в пользовательской среде в Windows для например, плюс мне нужно написать скрипт для каждой платформы)
- Решение с объединением файла
deploy.jar
в мои результаты работает, только если я делаю сборку на платформе Windows. К сожалению, когда результат создается на сервере сборки, работающем в Linux, я получил зависимый от Linux JAR, который не выполняется в Windows - он завершается неудачно с приведенной ниже трассировкой.
Я прочитал Как Java Launcher находит классы и Динамика программирования Java: классы Java и загрузка классов статьи, но у меня нет дополнительных идей, как правильно справиться с этой ситуацией .
Любые советы или решения приветствуются.
Трассировка:
java.lang.NoClassDefFoundError: Could not initialize class com.sun.deploy.config.Config
at com.sun.deploy.net.proxy.UserDefinedProxyConfig.getBrowserProxyInfo(UserDefinedProxyConfig.java:43)
at com.sun.deploy.net.proxy.DynamicProxyManager.reset(DynamicProxyManager.java:235)
at com.sun.deploy.net.proxy.DeployProxySelector.reset(DeployProxySelector.java:59)
...
java.lang.NullPointerException
at com.sun.deploy.net.proxy.DynamicProxyManager.getProxyList(DynamicProxyManager.java:63)
at com.sun.deploy.net.proxy.DeployProxySelector.select(DeployProxySelector.java:166)