2017-01-29 3 views
-1

Я уже создаю банку, которая содержит некоторые распространенные банки, которые мы будем использовать в разных приложениях и может использоваться многими пользователями.Создайте банку, которая содержит управление зависимостями maven

Чтобы решить эту проблему, я создаю общие банки, поэтому я могу управлять этими базами данных и их версиями, а затем хранить их на сервере nexus, чтобы он мог содержать родительский pom и может использоваться многими разработчиками.

Так я создать простое приложение Maven Java и в П этой баночки, я поставил, например:

Родитель П

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.emp</groupId> 
    <artifactId>dependencymanager</artifactId> 
    <version>1.0</version> 
    <packaging>jar</packaging> 
    <dependencyManagement> 
     <dependencies> 
      <dependency> 
       <groupId>org.primefaces</groupId> 
       <artifactId>primefaces</artifactId> 
       <version>6.0</version> 
      </dependency> 
      <dependency> 
       <groupId>org.eclipse.persistence</groupId> 
       <artifactId>javax.persistence</artifactId> 
       <version>2.1.1</version> 
      </dependency> 
     </dependencies> 
    </dependencyManagement> 
    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <maven.compiler.source>1.8</maven.compiler.source> 
     <maven.compiler.target>1.8</maven.compiler.target> 
    </properties> 
</project> 

Тогда в дочерних приложениях я использую эту баночку, как это:

<dependencies> 
    <dependency> 
     <groupId>com.emp</groupId> 
     <artifactId>dependencymanager</artifactId> 
     <version>1.0</version> 
    </dependency> 
</dependencies> 

Но когда я пытаюсь использовать org.primefaces, я не могу. Где я ошибаюсь, или я ошибаюсь в реализации управления зависимостями?

Примечание

Я уже прочитал это: http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html

Таким образом, в примере данного руководства не указать версию родительского ПОМ, поэтому, когда я удалить его показать мне ошибку, как это:

'dependencies.dependency.version' for com.emp:dependencymanager:jar is missing. 

Вопрос

  • Как я могу реализовать управление зависимостями в этом случае?
  • Есть ли лучший способ, чтобы это работало с такими же зависимостями с многими проектами и многими devellopers.
  • Я использую нексус хранить свои банки

спасибо.

ответ

1

В родительском П, добавьте dependencies непосредственно, оставляя вне dependencyManagement тегов. С помощью dependencyManagement вы указываете только, что если такая зависимость объявлена ​​в вашем pom, то должна использоваться версия, указанная в родительском pom. Но ваш родительский pom сам по себе не включает эти зависимости в качестве транзитивных зависимостей.

+0

спасибо @cello, когда я удаляю 'dependencyManagement', он работает нормально, эта часть решена, так что, если я, например, меняю версию' primefaces', тогда сохраните эту банку в nexus, версия может быть изменена для всех пользователей? –

+0

, до тех пор, пока пользователи не добавят свои собственные страницы с другой версией, тогда будет использоваться версия, указанная в родительском pom. – cello

+0

так почему люди говорят о 'dependencyManagement' как, где и когда я могу его использовать? –

1

Я использовал Maven Shade plugin для наличия зависимостей в сгенерированном файле jar. Проверьте, если аналогичный код работает для вас

<build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-shade-plugin</artifactId> 
       <version>2.4.3</version> 
       <executions> 
        <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>shade</goal> 
         </goals> 
         <configuration> 
          <transformers> 
           <transformer 
            implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
           </transformer> 
          </transformers> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
</build>