2014-01-21 4 views
2

Я создал плагин Maven, который проверяет и создает экземпляры классов в проекте. Когда в плагине Maven на classpath участвуют классы в проекте?Когда плагин Maven имеет доступ к классам проектов?

Разъем продолжает бросать исключение ClassNotFoundException.

Задайте вопрос после просмотра документации и поиска Maven.

Любая помощь была бы принята с благодарностью. Спасибо!

+0

Что именно вы пытаетесь сделать? Что вы подразумеваете под «Validates». Вы делаете манипуляции с байт-кодом? В противном случае JUnit, вероятно, будет достаточно ... –

+0

Я хочу обработать классы против конфигурации. Это не имеет ничего общего с модульным тестом. Он использует отражение для проверки конфигурации, чтобы убедиться, что класс действительно находится в конфигурации. –

ответ

5

Когда плагин Maven имеет на пути к классу классы в проекте?

Короткий ответ - это не по умолчанию.

Посмотри Guide to Maven Classloading

В частности:

Обратите внимание, что плагин не делает загрузчик классы ни содержат зависимости текущего проекта, ни его выхода сборки. Вместо этого плагины могут запрашивать путь компиляции, выполнения и тестового класса проекта из MavenProject в сочетании с аннотацией mojo requireDependencyResolution из спецификации API Mojo.

Если вам не хватает классов из известного артефакта, вы можете добавить этот артефакт в зависимость от проекта.

+0

Ahh .. это имеет смысл, но как бы я начал загружать классы для текущего проекта после их компиляции. Например, моя фаза по умолчанию для плагина - это классы процессов. –

+0

фаза классов процессов следует компилировать, поэтому нет проблем в этом случае –

+0

Возможно, мне что-то не хватает, но скудная документация или «Руководство по загрузке классов Maven» не слишком помогают. Конечно, существует стандартный способ изменения класса или класса. –

1

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

final PluginDescriptor pluginDescriptor = (PluginDescriptor) getPluginContext().get("pluginDescriptor"); 
final ClassRealm classRealm = pluginDescriptor.getClassRealm(); 
final File classes = new File(getProject().getBuild().getOutputDirectory()); 
try 
{ 
    classRealm.addURL(classes.toURI().toURL()); 
} 
catch (MalformedURLException e) 
{ 
    e.printStackTrace(); 
} 
+0

Это, похоже, не добавляло зависимостей maven моего проекта к пути к классам. – CorayThan

Смежные вопросы