Как добавить deploy.jar в classpath? - PullRequest
2 голосов
/ 24 марта 2010

У меня проблема: мне нужно добавить ${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)

1 Ответ

0 голосов
/ 28 марта 2010

Путь к классу загрузки не имеет загрузчика классов, поэтому добавить его динамически невозможно. Однако вы можете добавить атрибут Class-Path: deploy.jar в ваш файл MANIFEST.MF и потребовать, чтобы ваш JAR был запущен с -Xbootclasspath / a: myjar.jar. Если файл deploy.jar находится в том же каталоге, он также будет загружен в путь к загрузочному классу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...