2014-08-29 2 views
0

Я пытаюсь использовать maven package в проекте maven, который содержит исходный код, который находится на моей локальной машине. Я добавил их в качестве зависимостей в моем IDE (в моем случае IntelliJ), однако всякий раз, когда я пытаюсь построить мой проект, он дает мне сообщение об ошибкеMaven ignore не может найти символ для определенных пакетов

/location/to/package/and/Class.java:[##,##] error: cannot find symbol 
symbol: variable SomeRandomClass 
location: class SomeClassThatTheVariableWasLocatedIn 

Что я спрашиваю, есть ли способ создание определенного пакета, например my.package и все его содержимое (включая подпакеты), от генерации ошибок.

PS: Пакет, который должен быть исключен, должен быть одним из проекта, который не был добавлен в качестве зависимости в Maven.

ответ

1

Невозможно это сделать.

Это компилятор Java (а не Maven), который жалуется на недостающие символы. Он просто не может скомпилировать классы, которые относятся к отсутствующим пакетам. Язык Java не позволяет этого. Отсутствующие символы имеют, которые будут доступны при компиляции кода.

У вас есть три варианта:

  • Создать новый Maven артефакт, чтобы содержать «недостающие» пакеты, и добавить зависимости для других модулей, которые требуют от них.

  • Переместить «недостающие» пакеты в существующий модуль.

  • Не пытайтесь строить классы с отсутствующими зависимостями.

0

Если вы хотите, чтобы пропустить компиляции некоторые источники файлов (например, которые не являются обязательными в исходном коде и не удается из-за внешних зависимостей), вы можете попробовать с excludes configuration parameter в maven-compiler-plugin.

I.e. следующий исключает что-либо под (источник) папка sunshine/web/shaker/commons/ (он получает даже удален из проекта в IDE):

 <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <configuration> 
       <excludes> 
        <exclude>sunshine/web/shaker/commons/**</exclude> 
       </excludes> 
      </configuration> 
     </plugin> 

Документы не очень понятно мне о том, что это правильный формат для этого элемента (например, я раньше пытался указать полное имя пакета, но это не удалось), поэтому вам, возможно, придется попробовать его немного.