2012-12-15 12 views
6

Mam projekt 3 maven w Eclipse, którego struktura jest następująca. Projekt aplikacji służy jako projekt nadrzędny dla wszystkich innych aplikacji. Zawarłem plik pom.xml z projektu aplikacji (pierwszy pom) i pom.xml z projektu aplikacji internetowej. (Drugi POM)Uzależnienia od Maven 3 od nadrzędnego POM niedostępne dla dzieci w środowisku Zaćmienie

aplikacja
aplikacja ucho
app-ejg
aplikacja środnik

Problem występuje jest, że można zobaczyć zależności od rodziców do skutecznego pom z app-web/pom.xml, ale moje klasy Java w projekcie aplikacji internetowej nie mogą importować z tych zależności. Pojawia się komunikat "Nie można rozwiązać importu com.fasterxml". Mam ten problem także w projekcie app-ejb. Nie sądzę, że jest to po prostu "błąd zaćmienia". Jeśli spróbuję zainstalować mvn clean z projektu aplikacji, dostaję błędy kompilacji narzekając na to samo.

Nawiasem mówiąc, jedyną zmianą, którą wprowadziłem, jest przeniesienie zależności z pom.xml z dzieci i do rodzica. Chciałem scentralizować wszystko tak bardzo, jak to możliwe i zachować konfigurację mojego projektu jako SUCHĄ jak to tylko możliwe. Przed przeniesieniem zależności do hierarchii wszystko działało dobrze. Korzystam z platformy Eclipse Juno dla programistów Java EE z zainstalowanymi łatami m2e, m2e-wtp i WTP.

app/pom.xml

<?xml version="1.0" encoding="UTF-8"?> 
<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/maven-v4_0_0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>com.boardgamebuilder</groupId> 
<artifactId>app</artifactId> 
<version>0.0.1-SNAPSHOT</version> 
<packaging>pom</packaging> 
<name>app application</name> 

<modules> 
    <module>app-ejb</module> 
    <module>app-web</module> 
    <module>app-ear</module> 
</modules> 

<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <java-version>1.6</java-version> 
    <org.slf4j-version>1.7.2</org.slf4j-version> 
    <com.fasterxml.jackson-version>2.1.1</com.fasterxml.jackson-version> 
</properties> 

<dependencyManagement> 
    <dependencies> 

     <!-- JSON handler --> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-annotations</artifactId> 
      <version>${com.fasterxml.jackson-version}</version> 
     </dependency> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-core</artifactId> 
      <version>${com.fasterxml.jackson-version}</version> 
     </dependency> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-databind</artifactId> 
      <version>${com.fasterxml.jackson-version}</version> 
     </dependency> 

     <!-- RESTful servlet --> 
     <dependency> 
      <groupId>com.sun.jersey</groupId> 
      <artifactId>jersey-server</artifactId> 
      <version>1.16</version> 
     </dependency> 

     <!-- Logging --> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>${org.slf4j-version}</version> 
     </dependency> 
     <dependency> 
      <groupId>ch.qos.logback</groupId> 
      <artifactId>logback-classic</artifactId> 
      <version>1.0.7</version> 
     </dependency> 

     <!-- Test --> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.10</version> 
      <scope>test</scope> 
     </dependency> 

     <!-- Misc --> 
     <dependency> 
      <groupId>javax</groupId> 
      <artifactId>javaee-web-api</artifactId> 
      <version>6.0</version> 
      <scope>provided</scope> 
     </dependency> 

     <!-- Define the version of the EJB jar so that we don't need to repeat 
      ourselves in every module --> 
     <dependency> 
      <groupId>com.boardgamebuilder</groupId> 
      <artifactId>app-ejb</artifactId> 
      <version>0.0.1-SNAPSHOT</version> 
      <type>ejb</type> 
     </dependency> 

     <!-- Define the version of the WAR so that we don't need to repeat ourselves 
      in every module --> 
     <dependency> 
      <groupId>com.boardgamebuilder</groupId> 
      <artifactId>app-web</artifactId> 
      <version>0.0.1-SNAPSHOT</version> 
      <type>war</type> 
      <scope>compile</scope> 
     </dependency> 

    </dependencies> 
</dependencyManagement> 

<build> 
    <pluginManagement> 
     <plugins> 
      <!-- Compiler plugin enforces Java 1.6 compatibility and activates annotation 
       processors --> 
      <plugin> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.3.2</version> 
       <configuration> 
        <source>1.6</source> 
        <target>1.6</target> 
       </configuration> 
      </plugin> 
     </plugins> 
    </pluginManagement> 
</build> 

app-web/pom.xml

http://maven.apache.org/maven-v4_0_0.xsd "> 4.0.0

<parent> 
    <artifactId>app</artifactId> 
    <groupId>com.boardgamebuilder</groupId> 
    <version>0.0.1-SNAPSHOT</version> 
</parent> 

<artifactId>app-web</artifactId> 
<packaging>war</packaging> 

<name>app Web module</name> 
<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>2.1.1</version> 
     </plugin> 
    </plugins> 
</build> 

Odpowiedz

22

Po przeniesieniu zależności jackson-annotations i jackson-core do nadrzędnego POM nadal trzeba odwoływać się do niego w module app-web, określając (minimalnie) wartości groupId i artifactId. Maven documentation wyjaśnia to użycie.

+0

Doskonale, dziękuję. Nie zdawałem sobie sprawy, że działa to w ten sposób: C – Jazzepi

+1

Wiele z moich nieporozumień wynikało z faktu, że mogłem zobaczyć zależności w efektywnej pom z dzieckiem. Czy możesz wyjaśnić to racjonalnie? – Jazzepi

+1

@Jazzepi Tak, zgadzam się, że to rzeczywiście jest mylące. Sądzę, że w pewnym momencie też się potknąłem. Racjonalne uzasadnienie? Nie wiem –

0

Jeśli Twoja aplikacja wojenna pom ma <packagingExcludes>WEB-INF/lib/*.jar</packagingExcludes>, wyklucz ją i sprawdź:

Powiązane problemy