M2Eclipse показывает ошибку, но Maven компилирует нормально

#java #eclipse #maven #pom.xml #m2eclipse

#java #eclipse #maven #pom.xml #m2eclipse

Вопрос:

У меня всегда есть некоторые из самых неясных проблем, и часто я нахожу похожие проблемы, но неприменимые к моей реальной проблеме…

В любом случае, у меня проблема с M2Eclipse, показывающим ошибку в Eclipse. В настоящее время мои POM.xml ссылки xml-apis:xml-apis на некоторые версии (да, я знаю о проблеме с Xerces) и, по-видимому, xml-apis заменяют, а не переопределяют классы в JDK. Один конкретный пример такого находится org.w3c.dom.Element в rt.jar в JDK; этот класс существует, но xml-apis имеет класс с тем же именем и структурой пакета, который эффективно заменяет его — или так думает Eclipse.

Что делает это плохим для меня, так это то, что, поскольку xml-apis заменяет эту реализацию вместо ее переопределения, в коде есть ссылки (которые мне было поручено перенести с Ant на Maven, где вы могли бы просто изменить порядок сборки, и Eclipse перестанет ныть), где библиотеки не совпадают… Например, Element e; e.getTextContext(); выдаст ошибку, такую, что « The method getTextContent() is undefined for the type Element .» Однако эта ошибка отображается только в редакторе и окне проблем в Eclipse. Но Maven компилирует его просто отлично… Итак, почему Eclipse показывает ошибку?

Насколько мне известно, нет способа изменить порядок сборки в проекте Maven в Eclipse, чтобы он перестал это делать. У кого-нибудь есть какие-либо решения для этого?

Для справки (если это имеет значение, в чем я сомневаюсь) Я использую Windows 7 Professional, компиляцию с JDK 1.6 и использую Maven 3.0.4.

Ответ №1:

 select your project > right click > properties > java build path > order and export > select JRE entry and hit down
  

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

Комментарии:

1. Я не знаю, почему я этого не пробовал. Спасибо! Однако есть одно несоответствие, и оно заключается в том, что зависимости maven должны быть после JDK, по-видимому.

2. почему это должно быть после ввода JDK?

3. Бьет меня; Изначально у меня это было до JDK, и это было причиной ошибки — переключив ее на после того, как JDK исправил ее. Я уверен, что в компиляторе есть какая-то механика, которая замечает, что есть класс с повторяющимся путем / именем, и просто берет первый, который он нашел до обмана.

4. первый из них будет обнаружен