Как мне объединить библиотечный код и плагин maven в одном проекте? - PullRequest
1 голос
/ 20 мая 2009

Могу ли я создать один проект maven, который можно включить как зависимость (для ссылки на классы Java внутри) и выполнить как плагин?

Я работаю над библиотекой, чтобы помочь с размещением GWT в стеке LAMP. Чтобы кто-то использовал это, ему необходимо расширить некоторые классы Java (поэтому это должна быть зависимость), и им нужно вызвать плагин maven (поэтому он должен быть плагином). Код плагина ссылается на одни и те же классы Java, поэтому, если они являются отдельными проектами, плагин должен зависеть от библиотечного.

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

Ответы [ 3 ]

1 голос
/ 21 мая 2009

Вам было бы лучше сделать следующее

  1. проект для банки, Foo: Foo.jar
  2. проект, который использует Foo: Foo.jar как зависимость, которая создает плагин
  3. Maven родительский проект , который строит 1 и 2

Структура каталогов будет выглядеть так

\project\pom.xml
\project\foo\pom.xml
\project\foo\src\main\java\foo.java
\project\plugin\pom.xml
\project\plugin\src\main\resources
\project\plugin\src\main\java

Из \ project вы можете сделать mvn clean package для сборки \project\foo\target\foo.jar и \project\plugin\target\plugin.jar

Надеюсь, это поможет.

1 голос
/ 20 мая 2009

Если вы создаете плагин maven, он все еще имеет artifactId / groupId / version. Нет причин, по которым нельзя ссылаться как в вашем разделе, так и в вашем разделе. С другой стороны, если это ужасно, почему бы просто не создать библиотеку с общим кодом, от которого зависят и ваш основной проект, и ваш проект плагина maven?

РЕДАКТИРОВАТЬ:

Извините, во второй части не было ясно. Посмотрите на составные проекты maven, где есть pom верхнего уровня, который определяет количество дочерних модулей. В этом случае плагин maven и код общей библиотеки могут быть отдельными дочерними элементами, создающими отдельные артефакты, но вам нужен только один номер версии и одна команда выпуска, выполняемая с верхнего уровня. Я не делал этого, но есть много проектов с открытым исходным кодом, которые делают. его часто используют в качестве идиомы, чтобы поместить тестовый код в один модуль, на который могут ссылаться все остальные, не выпуская его в какой-либо распространяемый файл.

0 голосов
/ 24 мая 2009

Лучшая практика - не делать то, что вы предлагаете. Примерами этого являются PMD, BND, JUnit / TestNG и т. Д. - ни один серьезный проект, похоже, не упаковывает плагин maven с собственно библиотекой.

Один из способов получить обе альтернативы - использовать сборки maven, чтобы иметь два отдельных проекта maven для каждой библиотеки и плагина, а затем отдельную упаковку в виде jar-файла, содержащего классы из обоих.

...