2014-01-29 4 views
0

Как настроить pom.xml для сохранения A и B в моем приватном локальном кэше репозитория Maven при использовании Maven Central и хранилищ Maven в java.net?Как мне настроить pom.xml для сохранения A и B в моем приватном локальном кэше репозитория Maven при использовании Maven Central и репозиториев Maven java.net?

У меня есть два местных частных проекта, назовите их A и B, но оба они зависят от нескольких исправлений ошибок в org.javolution:javolution-core-java:6.1.0-SNAPSHOT, что не в Maven Central. Оба A и B зависят от других артефактов, которые находятся в Maven Central. Project B зависит от проекта A.

Я привык использовать Maven с локальным хранилищем (кешем) в ~/.m2 и Central, но похоже, что я неправильно настраиваю проект для java.net репозиторий.

<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.redacted</groupId> 
    <artifactId>B</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>B</name> 
    <url>http://maven.apache.org</url> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.3.2</version> 
       <configuration> 
        <source>1.7</source> 
        <target>1.7</target> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>3.8.1</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>com.opera.link.api</groupId> 
      <artifactId>opera-link-client</artifactId> 
      <version>1.0-SNAPSHOT</version> 
      <scope>compile</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.javolution</groupId> 
      <artifactId>javolution-core-java</artifactId> 
      <version>6.1.0-SNAPSHOT</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.httpcomponents</groupId> 
      <artifactId>httpclient</artifactId> 
      <version>4.2.5</version> 
      <type>jar</type> 
     </dependency> 
     <dependency> 
      <groupId>${project.groupId}</groupId> 
      <artifactId>A</artifactId> 
      <version>${project.version}</version> 
     </dependency> 
    </dependencies> 

    <repositories> 
     <repository> 
      <id>Java.net Maven Repository</id> 
      <url>https://maven.java.net/content/repositories/snapshots/</url> 
     </repository> 
    </repositories> 

</project> 

<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.redacted</groupId> 
    <artifactId>A</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>A</name> 
    <url>http://maven.apache.org</url> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.3.2</version> 
       <configuration> 
        <source>1.7</source> 
        <target>1.7</target> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>3.8.1</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.javolution</groupId> 
      <artifactId>javolution-core-java</artifactId> 
      <version>6.1.0-SNAPSHOT</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.httpcomponents</groupId> 
      <artifactId>httpclient</artifactId> 
      <version>4.2.5</version> 
     </dependency> 
    </dependencies> 
    <repositories> 
     <repository> 
      <id>Java.net Maven Repository</id> 
      <url>https://maven.java.net/content/repositories/snapshots/</url> 
     </repository> 
    </repositories> 
</project> 

Удаление <repositories> элемент из B дает очевидный результат:

------------------------------------------------------------------------ 
Building B 1.0-SNAPSHOT 
------------------------------------------------------------------------ 
The POM for org.javolution:javolution-core-java:jar:6.1.0-SNAPSHOT is missing, no dependency information available 
------------------------------------------------------------------------ 
BUILD FAILURE 
------------------------------------------------------------------------ 
Total time: 0.547s 
Finished at: Wed Jan 29 17:19:48 EST 2014 
Final Memory: 3M/15M 
------------------------------------------------------------------------ 

Добавление <repositories> элемента обратно в B дает это на ход:

------------------------------------------------------------------------ 
Building B 1.0-SNAPSHOT 
------------------------------------------------------------------------ 

--- exec-maven-plugin:1.2.1:exec (default-cli) @ B --- 
java.lang.ExceptionInInitializerError 
Caused by: java.lang.RuntimeException: Uncompilable source code - package com.redacted.A.posts does not exist 
    at com.redacted.B.App.<clinit>(App.java:30) 
------------------------------------------------------------------------ 
BUILD FAILURE 
------------------------------------------------------------------------ 
Total time: 1.219s 
Finished at: Wed Jan 29 17:50:45 EST 2014 
Final Memory: 4M/15M 
------------------------------------------------------------------------ 

Как я печатаю это, я понимаю, возможно, это может быть не проблема Maven, а проблема NetBeans. Я нажал кнопку «Повторно запустил цели», ожидая чистую и строящуюся (так как это то, что я последний раз выполнял), но выполнение реальной очистки и сборки, похоже, компилируется правильно, в то время как «Re-Run Goals» просто делает mvn запустите цель exec. Правильно ли настроен мой pom.xml?

Редактировать: Я использую NetBeans 7.4.

+0

Вы не указали, какую версию netbeans вы используете, и какое действие вы выполнили (очистить и выполнить или запустить?) В любом случае этот документ может помочь, если это действительно проблема netbeans - http: //wiki.netbeans .org/FaqCompileOnSave # Using_Compile_on_Save_in_Maven_Projects – mkleint

ответ

0

Ваше первое сообщение об ошибке означает, что javolution-SNAPSHOT не найден. Вы должны предоставить банку с pom в своем локальном репозитории или купить с помощью java.net-репозитория.

Второе сообщение об ошибке является результатом выполнения проекта B с помощью Exec-Maven-Plugin. Странное сообщение кажется немного скуповатым.

Я бы порекомендовал вам:

  • Сначала поставить пользовательские javolution-SNAPSHOT.jar в локальный репозиторий Maven с использованием Maven установки мяча
  • Если сомневаетесь, какие библиотеки вам нужно от Явы. net, поместите местоположение репозитория в проект A, а также проект B.
  • Затем установите проект A в локальный репозиторий maven, используя цель установки maven.
  • Затем установите проект B в локальный репозиторий maven.