Проблемы с classpath с Jini ClassDep, искателем зависимостей Java - PullRequest
0 голосов
/ 14 апреля 2009

Я начал использовать Sun ClassDep в качестве решения для борьбы с включением ненужных JAR-файлов в мое получившееся приложение WAR . Кажется, рок. Однако этого зверя трудно приручить!

Я получаю несколько ошибок классов, не найденных, даже если они явно включены в путь к классу, который я передаю ему. Пример:

couldn't find: org.apache.log4j.Logger: No file for: Logger
couldn't find: org.hibernate.Session: No file for: Session
couldn't find: org.joda.time.LocalDate: No file for: LocalDate

ОДНАКО ... Посмотрите на часть пути к классу, который я ему даю:

...;"C:\Documents and Settings\Andre\Desktop\workspace\icaro\WebContent\WEB-INF\lib\hibernate3.jar";...;"C:\Documents and Settings\Andre\Desktop\workspace\icaro\WebContent\WEB-INF\lib\joda-time-1.5.2.jar";"C:\Documents and Settings\Andre\Desktop\workspace\icaro\WebContent\WEB-INF\lib\log4j-1.2.11.jar";...

Я просмотрел их и увидел, что «отсутствующие» классы действительно находятся в этих файлах.

Кто-нибудь есть идеи, что дает?

Ответы [ 3 ]

0 голосов
/ 21 апреля 2009

Неужели это не проблема с вашими банками? Как правило, если это проблема пути к классам, вы получите NoClassDefFoundError.

Некоторые способы исследовать это были бы

  1. отображение пути к классам из вашей программы (System.out.println (System.getProperty ("java.class.path");

  2. попросите загрузчик классов отобразить URL загруженного класса в различных точках вашего приложения, если вы используете иерархию загрузчиков классов (System.out.println (Thread.currentThread (). GetContextClassLoader (). getResource ("org / apache / log4j / Logger.class");

0 голосов
/ 23 апреля 2009

Эти записи, вероятно, находятся в файлах манифеста одного или нескольких JARS, на которые вы ссылаетесь. Classdep игнорирует записи в файлах манифестов, что приводит к ошибкам.

См. ClassDep документацию:

Если вы используете файлы JAR, любые записи манифеста Class-Path в этих файлах JAR игнорируются, поэтому вы должны явно включить значения этих записей манифеста в путь, иначе могут возникнуть ошибки. Например, если вы включаете jini-ext.jar, вам следует явно включить также jini-core.jar, поскольку jini-core.jar находится в записи манифеста Class-Path в jini-ext.jar. *

0 голосов
/ 18 апреля 2009

Я вижу, вы работаете на Windows. Не могли бы вы столкнуться с печально известным исключением «Входная строка слишком длинная»?

Возможно, ваш Classpath слишком длинный, если вы включаете большое количество jar-файлов.

Эта публикация Хунг Хюнх (Терракота) содержит лучшее объяснение проблемы и несколько вариантов того, как вы можете ее решить, если у вас возникла эта проблема.

...