Как дать приоритет файлу jar в classpath eclipse? - PullRequest
8 голосов
/ 30 сентября 2011

Существует файл класса TagAttributeInfo, который находится под двумя из моих файлов jar.

j2ee-6.1.jar,servlet-api-2.3.jar .

Теперь мне нужно, чтобы этот класс вызывался из j2ee-6.1.jar, но во время выполнения он принимает класс servlet-api-2.3.jar, чего я не хочу. Кто-нибудь может мне помочь расставить приоритеты в jar-файле в пути к классам, чтобы я дал первый приоритет j2ee-6.1.jar.

Ответы [ 7 ]

16 голосов
/ 30 сентября 2011

Вы перемещаете его вверх в порядке пути к классам (щелкните проект правой кнопкой мыши, выберите «Путь к сборке», затем «Настроить путь сборки», затем «Порядок и экспорт»)

6 голосов
/ 30 сентября 2011
  • Перейдите в Свойства проекта> Путь сборки .
  • . На вкладке Заказ и экспорт найдите j2ee-6.1.jar и нажмите Кнопка «Вверх» , чтобы переместить ее вверх в порядке следования классов.Нажимайте Вверх до тех пор, пока оно не станет выше servlet-api-2.3.jar.
  • Наконец нажмите OK.
3 голосов
/ 30 сентября 2011
  1. удалите servlet-api-2.3.jar, он вам не нужен.
  2. или переместите j2ee-6.1.jar выше, чем servlet-api-2.3.jar в списке lib
3 голосов
/ 30 сентября 2011

Будет использован первый jar-файл, найденный в classpath с классом, который он ищет.Таким образом, вы можете расставить приоритеты для вашего класса, поместив его в начало пути к классам.

Как именно вы это сделаете в Eclipse, я не уверен, но, вероятно, есть некоторый список зависимостей проекта, которые соответствуют jar-файлам на пути к классам, и, надеюсь, вы можете упорядочить элементы в этом списке и поместить своибанка на вершине.Попробуйте найти его в панели настроек проекта.

1 голос
/ 30 сентября 2011

Только один из этих jar должен быть в вашем classpath, чтобы иметь возможность компилировать ваши классы.Но во время выполнения jar будет в вашем пути к классу сервера приложений, и вы не сможете заменить его другим.

Если ваш контейнер является контейнером JEE6, он использует servlet 3.0, а servlet-api-2.3.jar устарел и не должен находиться в classpath.Если ваш контейнер поддерживает только сервлет api 2.3, вы не сможете использовать классы из jee6 jar в этом контейнере.

1 голос
/ 30 сентября 2011

Вы уверены, что вам нужны оба jar-файла?

В любом случае, в диалоге Build Path вы можете указать порядок поиска файлов jar.

1 голос
/ 30 сентября 2011

Я не знаю, является ли это частью спецификации, но размещение «приоритетного» фляги ранее на classpath работает, когда я делал это в прошлом.

...