зависимости сборки maven в Eclipse, несколько проектов - PullRequest
1 голос
/ 16 ноября 2010

У меня есть два проекта в Eclipse, оба управляются Maven.Ссылки B, и они находятся на плоской системе.В настоящее время мы настроили то, что нам нужно построить на B - сгенерировать jar в системе, и A ссылается на этот jar.

Я бы хотел изменить это так, чтобы нам просто нужно было построить A, и она будет автоматически собирать B?Могу ли я сделать это в Maven / eclipse таким образом, чтобы мне не нужно было создавать более высокий проект?

Я изучил некоторые документы Maven, но они просто смущают меня :).Спасибо за вашу помощь.

Пом выглядит так

(B)

    <project xmlns="..." xmlns:xsi="..."
 xsi:schemaLocation="...">
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.thetus</groupId>
 <artifactId>irisMDK</artifactId>
 <packaging>jar</packaging>
 <name>irisMDK</name>
 <version>0.1</version>
 <url>...maven.apache...</url>
 <build>
  <sourceDirectory>java/src/main</sourceDirectory>
  <plugins>
   <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.1</version>
    <configuration>
     <source>1.6</source>
     <target>1.6</target>
     <testExcludes>
      <exclude>**/*.java</exclude>
     </testExcludes>
    </configuration>
   </plugin>
  </plugins>
  <resources>
   <resource>
    <directory>java/src/main</directory>
   </resource>
  </resources>
 </build>
 <dependencies>
  ...
 </dependencies>
</project>

------ И (A):

 <project xmlns="..." xmlns:xsi="..."
 xsi:schemaLocation="...">
 <modelVersion>4.0.0</modelVersion>
 <groupId>local.b</groupId>
 <artifactId>projectB</artifactId>
 <packaging>jar</packaging>
 <name>B</name>
 <version>RELEASE</version>
 <url>...</url>
 <repositories>
  <repository>
   <id>maven2-repository.dev.java.net</id>
   <name>Java.net Repository for Maven</name>
   <url>...download.java.net/maven...</url>
  </repository>
 </repositories>
 <build>
  <plugins>
                   ...
  </plugins>
  <sourceDirectory>java/src/main</sourceDirectory>
  <testSourceDirectory>java/src/test</testSourceDirectory>
  <resources>
  </resources>
 </build>
 <dependencies>
  <dependency>
   <groupId>local.b</groupId>
   <artifactId>projectB</artifactId>
   <scope>system</scope>
   <version>RELEASE</version>
   <systemPath>${basedir}/../B/target/B-0.1.jar</systemPath>
  </dependency>
 ...
 </dependencies>
 <reporting>
  ...
 </reporting>
</project>

ЕслиВы могли бы показать мне пример того, как изменить ^^^ Я был бы очень признателен!

Ответы [ 2 ]

4 голосов
/ 16 ноября 2010

Оригинальный ответ: Плагин M2Eclipse , если вы его еще не используете, позволяет вам сделать это. После установки удалите

<systemPath>${basedir}/../B/target/B-0.1.jar</systemPath>

из pom.xml А и убедитесь, что groupid, artifactid, версия соответствуют тому, что определено в pom.xml

B

Затем щелкните правой кнопкой мыши проект, Maven-> Включить разрешение зависимостей. Сборка теперь должна смотреть на локальный проект B

Edit:

Если pom.xml B выглядит следующим образом (из вашего примера):

<project xmlns="..." xmlns:xsi="..."
      xsi:schemaLocation="...">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.thetus</groupId>
      <artifactId>irisMDK</artifactId>
      <packaging>jar</packaging>
      <name>irisMDK</name>
      <version>0.1</version>

      ...
 </project>

В помпе А (который зависит от проекта B) ваша зависимость должна выглядеть так:

<project>
...
    <dependencies>
      <!--Attributes of project that this project is dependent upon, as defined in that projects POM -->
      <dependency>
           <groupId>com.thetus</groupId>
           <artifactId>irisMDK</artifactId>
           <version>0.1</version>
      </dependency>
 ...
     </dependencies>
....
</project>

Это скажет maven и eclipse, что проект A явно зависит от этой версии Project B. В M2Eclipse, если у вас есть соответствующий groupId, artifactId и версия в вашем рабочем пространстве, и у вас включено «Разрешение зависимостей», содержимое проекта B будет автоматически построен и включен в проект А.

Кроме того, открытие консоли Maven в eclipse (представление консоли-> новый раскрывающийся список консоли-> новая консоль maven) может помочь в отладке, почему проект B не выбран проектом A.

3 голосов
/ 16 ноября 2010

Звучит так, как будто вы хотите использовать многомодульный проект, здесь - это простое учебное пособие.Вы должны создать родительский POM, и иметь A и B в качестве дочерних, при этом A сохраняет свою зависимость от B.

...