2015-03-12 5 views
1

скажем, у меня есть мульти Maven проект модуля, с 3-мя модулями:Maven разрешение зависимостей вопрос

Родитель А и дети В и С

C имеет зависимость от В.

Учитывая, что мой .m2 локальный репозиторий не содержит каких-либо из моих артефактов (удаленных их вручную), когда я запускаю сборку на родительском модуле A, первое, что нужно сделать maven, - это загрузить зависимость B от Nexus.

Мне интересно, есть ли способ остановить это, я хочу, чтобы maven сначала построил B, а затем использовал этот артефакт B для создания C. Я не хочу, чтобы он загружал его из nexus, когда B будет построенный так или иначе в этой самой сборке.

Я также не хочу использовать опцию -o (offline). Я просто пытаюсь понять, как работает maven.

Я предполагаю, что это связано с тем, что оба артефакта B имеют одну и ту же версию снимка?

Приветствия

Edit: Это происходит только один раз, в первый раз, когда я запустить сборку. Если я запустил его еще раз, B уже существует в моей директории m2, поэтому он не будет загружен снова. Я просто интересно, почему B загружается самый первый раз

Edit2: Это пример из первых строк мне строит родительский pom.xml с

mvn clean install -DskipTests 


[INFO] Scanning for projects... 
Downloading: http://xx.xx.xx:xxxxx/nexus/content/groups/public/org/androidannotations/androidannotations/3.3-SNAPSHOT/maven-metadata.xml 
Downloaded: http://xx.xx.xx:xxxxx/nexus/content/groups/public/org/androidannotations/androidannotations/3.3-SNAPSHOT/maven-metadata.xml (2 KB at 2.5 KB/sec) 
Downloading: http://xx.xx.xx:xxxxx/nexus/content/groups/public/org/androidannotations/androidannotations-parent/3.3-SNAPSHOT/maven-metadata.xml 
Downloaded: http://xx.xx.xx:xxxxx/nexus/content/groups/public/org/androidannotations/androidannotations-parent/3.3-SNAPSHOT/maven-metadata.xml (622 B at 1.7 KB/sec) 
Downloading: http://xx.xx.xx:xxxxx/nexus/content/groups/public/org/androidannotations/androidannotations-api/3.3-SNAPSHOT/maven-metadata.xml 
Downloaded: http://xx.xx.xx:xxxxx/nexus/content/groups/public/org/androidannotations/androidannotations-api/3.3-SNAPSHOT/maven-metadata.xml (2 KB at 4.2 KB/sec) 
Downloading: http://xx.xx.xx:xxxxx/nexus/content/groups/public/com/follower/common/0.2-SNAPSHOT/maven-metadata.xml 
Downloaded: http://xx.xx.xx:xxxxx/nexus/content/groups/public/com/follower/common/0.2-SNAPSHOT/maven-metadata.xml (972 B at 2.6 KB/sec) 
Downloading: http://xx.xx.xx:xxxxx/nexus/content/groups/public/com/follower/common/0.2-SNAPSHOT/common-0.2-20150312.211752-3.jar 
Downloading: http://xx.xx.xx:xxxxx/nexus/content/groups/public/com/follower/common/0.2-SNAPSHOT/common-0.2-20150312.211752-3-tests.jar 
Downloaded: http://xx.xx.xx:xxxxx/nexus/content/groups/public/com/follower/common/0.2-SNAPSHOT/common-0.2-20150312.211752-3-tests.jar (49 KB at 31.3 KB/sec) 
Downloaded: http://xx.xx.xx:xxxxx/nexus/content/groups/public/com/follower/common/0.2-SNAPSHOT/common-0.2-20150312.211752-3.jar (94 KB at 33.9 KB/sec) 
Downloading: http://xx.xx.xx:xxxxx/nexus/content/groups/public/com/follower/application/0.2-SNAPSHOT/maven-metadata.xml 
Downloaded: http://xx.xx.xx:xxxxx/nexus/content/groups/public/com/follower/application/0.2-SNAPSHOT/maven-metadata.xml (938 B at 3.2 KB/sec) 
Downloading: http://xx.xx.xx:xxxxx/nexus/content/groups/public/com/follower/application/0.2-SNAPSHOT/application-0.2-20150312.203520-2.apk 
Downloaded: http://xx.xx.xx:xxxxx/nexus/content/groups/public/com/follower/application/0.2-SNAPSHOT/application-0.2-20150312.203520-2.apk (6585 KB at 63.0 KB/sec) 
[INFO] ------------------------------------------------------------------------ 
[INFO] Reactor Build Order: 
[INFO] 
[INFO] Follower 
[INFO] Follower - Common 
[INFO] Follower - Application 
[INFO] Follower - Application Espresso Tests 
[INFO] Follower - Server 
[INFO] 
[INFO] Using the builder org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder with a thread count of 1 
[INFO] 
[INFO] ------------------------------------------------------------------------ 
[INFO] Building Follower 0.2-SNAPSHOT 
[INFO] ------------------------------------------------------------------------ 
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ follower --- 
[INFO] 
[INFO] --- maven-install-plugin:2.4:install (default-install) @ follower --- 
[INFO] Installing C:\Users\sakis\Desktop\intelliJ projects\follower\pom.xml to C:\Users\sakis\.m2\repository\com\follower\follower\0.2-SNAPSHOT\follower-0.2-SNAPSHOT.pom 
[INFO] 
[INFO] ------------------------------------------------------------------------ 
[INFO] Building Follower - Common 0.2-SNAPSHOT 
[INFO] ------------------------------------------------------------------------ 
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ common --- 
[INFO] Deleting C:\Users\sakis\Desktop\intelliJ projects\follower\common\target 
[INFO] 
[INFO] --- maven-resources-plugin:2.7:resources (default-resources) @ common --- 
[INFO] Using 'UTF-8' encoding to copy filtered resources. 
[INFO] skip non existing resourceDirectory C:\Users\sakis\Desktop\intelliJ projects\follower\common\src\main\resources 
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ common --- 
[INFO] Changes detected - recompiling the module! 
[INFO] Compiling 50 source files to C:\Users\sakis\Desktop\intelliJ projects\follower\common\target\classes 

Как вы можете видеть, что «общий» модуль jar, "common" test-jar и "application.apk", хотя эти артефакты будут созданы, когда будут созданы общие и прикладные модули.

В pom.xml я следующее (только фрагменты):

родитель pom.xml:

<groupId>com.follower</groupId> 
<artifactId>follower</artifactId> 
<version>0.2-SNAPSHOT</version> 
<packaging>pom</packaging> 

<modules> 
    <module>common</module> 
    <module>application</module> 
    <module>espresso</module> 
    <module>server</module> 
</modules> 

общего pom.xml: нет зависимостей от других модулей

приложение ПОМ .xml:

<parent> 
    <groupId>com.follower</groupId> 
    <artifactId>follower</artifactId> 
    <version>0.2-SNAPSHOT</version> 
</parent> 

<artifactId>application</artifactId> 
<packaging>apk</packaging> 

<dependencies> 
    <dependency> 
     <groupId>${project.groupId}</groupId> 
     <artifactId>common</artifactId> 
     <type>jar</type> 
    </dependency> 
    <dependency> 
     <groupId>${project.groupId}</groupId> 
     <artifactId>common</artifactId> 
     <scope>test</scope> 
     <type>test-jar</type> 
    </dependency> 
</dependencies> 

pom.xml сервер:

<parent> 
     <groupId>com.follower</groupId> 
     <artifactId>follower</artifactId> 
     <version>0.2-SNAPSHOT</version> 
    </parent> 

    <artifactId>server</artifactId> 
    <packaging>jar</packaging> 

    <dependencies> 
     <dependency> 
      <groupId>${project.groupId}</groupId> 
      <artifactId>common</artifactId> 
      <type>jar</type> 
     </dependency> 
     <dependency> 
      <groupId>${project.groupId}</groupId> 
      <artifactId>common</artifactId> 
      <type>test-jar</type> 
     </dependency> 
    </dependencies> 

эспрессо pom.xml:

<parent> 
    <groupId>com.follower</groupId> 
    <artifactId>follower</artifactId> 
    <version>0.2-SNAPSHOT</version> 
</parent> 

<artifactId>espresso</artifactId> 
<packaging>apk</packaging> 

<dependencies> 
    <dependency> 
     <groupId>${project.groupId}</groupId> 
     <artifactId>application</artifactId> 
     <scope>provided</scope> 
     <type>apk</type> 
    </dependency> 
</dependencies> 
+0

Вы пытались использовать более старую версию maven? Я использую более старую версию maven (maven 3.2.5), и я никогда не сталкивался с такой проблемой. BTW: это не должно быть потому, что вы используете * такую ​​же * моментальную версию, потому что SNAPSHOT означает «в разработке», и это означает, что maven скорее построит, чем загрузит его. Вы указали политику моментального снимка maven? См. Http://stackoverflow.com/a/3805559/2987273 и http://maven.apache.org/pom.html#Repositories – Alexander

+0

Я использовал maven 3.2.1, я просто попробовал 3.2.5, и я точно вижу То же самое происходит –

+0

Что относительно политики моментальных снимков? – Alexander

ответ

1

Update недоразумение: я удалил более общее объяснение, как структурированные модули работают в мавена - у вас уже есть что.

Если ваша структура как этот

A (root - no dependencies) 
- B (standalone) 
- C (dependent on B) 

И модули B и C и имеют правильные зависимости (возможно добавить родителя> relativePath ваших модулей) и корень ПОМ не dependecies, но только dependencyManagement, он не должен загружать артефакты ваших модулей.

Try добавления relativePath:

<parent> 
     <groupId>[...]</groupId> 
     <artifactId>[...]</artifactId> 
     <version>0.1-SNAPSHOT</version> 
     <relativePath>../pom.xml</relativePath> 
    </parent> 

Проверьте, если ваш корневой pom.xml имеет зависимости - вы не должны объявлять зависимости для ваших собственных модулей здесь, только dependencyManagement.

+0

Жаль, что я, возможно, не сделал это ясно. У меня есть корень pom, обычно называемый parent pom.xml, и у него есть структура, о которой вы говорили. Поэтому, когда я создаю родительский pom.xml, я получаю описанную проблему: Первая зависимость B извлекается из nexus (не могу понять почему), тогда B строится так, как это необходимо для C, тогда C строится с использованием B. –

+0

Это происходит только один раз, когда я запускаю сборку. Если я запустил его еще раз, B уже существует в моей директории m2, поэтому он не будет загружен снова. Мне просто интересно, почему B загружается в первый раз –

+1

Этого не должно быть. Можете ли вы показать мне выход maven и, может быть, вы помните? Он должен показать заказ реактора. Например. удалите модуль B из своего .m2/репозитория, поэтому его нужно снова создать/загрузить. – Alexander

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