2016-02-26 2 views
1

В подкаталоге под проектом у меня есть библиотечный модуль кода, который я пишу и поддерживаю, который должен использоваться совместно с другими модулями в более крупном проекте. Для удобства он разрабатывается одновременно вместе со всеми модулями, потребляющими его.Как создать частный JAR в локальном подкаталоге, который я обозначил как дополнительный репозиторий?

project 
    libs 
    module-A 
    module-B 
    module-N 
    library-module 

Для сложных причин, налагаемых как наша сборка делается после того, как он выходит наши руки, мы не хотим, чтобы развернуть локальный репозиторий Maven Билд хоста (~/.m2/repository). Вместо этого мы хотим, чтобы это было в подкаталоге, локальном для проекта, здесь libs.

Из командной строки я знаю, что следующее будет помещено в локальный репозиторий Maven, но я не хочу делать это из командной строки, и я не хочу, чтобы результат попадал в локальный репозиторий Maven , Я хочу, чтобы это произошло, когда mvn install запускается системой сборки в подкаталоге библиотеки-модуля.

mvn install:install-file -Dfile=your-artifact-1.0.jar \ 
         [-DpomFile=your-pom.xml] \ 
         [-Dsources=src.jar] \ 
         [-Djavadoc=apidocs.jar] \ 
         [-DgroupId=org.some.group] \ 
         [-DartifactId=your-artifact] \ 
         [-Dversion=1.0] \ 
         [-Dpackaging=jar] \ 
         [-Dclassifier=sources] \ 
         [-DgeneratePom=true] \ 
         [-DcreateChecksum=true] 

(. Обратите внимание, что ответ я ищу не будет IDE-зависимая)

+0

Почему бы вам не сделать так, чтобы ваша жизнь была настолько сложной? В чем проблема при простой установке файлов в локальный репозиторий? – khmarbaise

ответ

0

Для удовлетворения требований, предусмотренных в двух шагах конфигурации, то требуется:

  • Отключить установка артефакта по умолчанию в локальный репозиторий через skip вариант Maven Install Plugin
  • Настройте цель install-file в пределах POM, чтобы иметь ее как часть вашей сборки (следовательно, нет необходимости вручную запустить его из командной строки)

Следующая конфигурация обеспечит его:

<properties> 
    <library.repository.folder>../libs</library.repository.folder> 
</properties> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-install-plugin</artifactId> 
      <version>2.5.2</version> 
      <configuration> 
       <skip>true</skip> 
      </configuration> 
      <executions> 
       <execution> 
        <id>install-artifact</id> 
        <phase>install</phase> 
        <goals> 
         <goal>install-file</goal> 
        </goals> 
        <configuration> 
         <groupId>${project.groupId}</groupId> 
         <artifactId>${project.artifactId}</artifactId> 
         <version>${project.version}</version> 
         <packaging>${project.packaging}</packaging> 
         <file>${project.build.directory}/${project.build.finalName}.${project.packaging}</file> 
         <localRepositoryPath>${library.repository.folder}</localRepositoryPath> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

Пожалуйста, обратите внимание library.repository.folder свойство используется, чтобы указать нужную папку целевой lib (изменить в случае другой путь). Приведенная выше конфигурация использует стандартные свойства maven (для координат проекта и упаковки), но вы можете изменить их (или реальные значения жесткого кода) по мере необходимости.

Также обратите внимание, что цель install-file воссоздает под папкой lib ту же структуру папок, что и в локальном репозитории (lib \ groupId \ artifactId \ version \ file.jar). Если вместо этого вы хотели бы иметь файл прямо под Lib папку (Lib \ file.jar) можно затем перейти к следующей конфигурации:

<properties> 
    <library.repository.folder>../libs</library.repository.folder> 
</properties> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-install-plugin</artifactId> 
      <version>2.5.2</version> 
      <configuration> 
       <skip>true</skip> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <version>2.6</version> 
      <configuration> 
       <outputDirectory>${library.repository.folder}</outputDirectory> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

На этот раз мы не используем install-file цели, а скорее jar цель Maven Jar Plugin разместить упакованный артефакт непосредственно в папку lib (вместо стандартной папки target) и во время пакета phase (не install).

Если по какой-либо причине вы хотите сохранить конечный артефакт в целевой папке И скопируйте его прямо в папку lib (без иерархии папок maven). И на этапе установки вы можете перейти к следующей конфигурации:

<properties> 
    <library.repository.folder>../libs</library.repository.folder> 
</properties> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-install-plugin</artifactId> 
      <version>2.5.2</version> 
      <configuration> 
       <skip>true</skip> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <version>2.6</version> 
      <executions> 
       <execution> 
        <id>re-package-into-lib</id> 
        <phase>install</phase> 
        <goals> 
         <goal>jar</goal> 
        </goals> 
        <configuration> 
         <outputDirectory>${library.repository.folder}</outputDirectory> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 
Смежные вопросы