2017-02-17 1 views
0

ich ein Projekt, das ich Gebäude auf zwei verschiedene Arten versucht:Maven: Projekt kompiliert ohne Abhängigkeit in pom.xml definiert

  • Mit -Dmaven.repo.local Satz zu einem neuen Markenverzeichnis nur für den Build erstellt.
  • Ohne -Dmaven.repo.local (dann gehe ich davon aus es standardmäßig ~/.m2

Ich finde es sehr seltsam, dass mein Projekt einfach gut kompiliert, wenn ich nicht -Dmaven.repo.local bin mit, obwohl einige Abhängigkeiten sind nicht im POM. das Protokoll zeigt nicht diese Abhängigkeiten vom lokalen Repo (~/.m2) heruntergeladen oder aufgelöst werden.

Wenn ich versuche, ein ganz neues lokales Repository Angabe aufzubauen, schlägt der Build weil javac nicht einige Klassen auflösen kann (Das bedeutet, dass Maven und Java nicht wissen, wo diese Abhängigkeiten liegen).

[ERROR] /home/jenkins1/slave_home/workspace/Build/2.x/Dev_Test/2-Mainline_Stream_official_Green_build_V2/workspace/com.mycompany.myproj.iaas.rest/src/main/java/com/mycompany/myproj/iaas/api/rest/MigrationUninstallModulesResource.java:[18,23] error: package javax.ws.rs.core does not exist 
[ERROR] /home/jenkins1/slave_home/workspace/Build/2.x/Dev_Test/2-Mainline_Stream_official_Green_build_V2/workspace/com.mycompany.myproj.iaas.rest/src/main/java/com/mycompany/myproj/iaas/api/rest/MigrationUninstallModulesResource.java:[42,1] error: cannot find symbol 
[ERROR] symbol: class Path 
[ERROR] /home/jenkins1/slave_home/workspace/Build/2.x/Dev_Test/2-Mainline_Stream_official_Green_build_V2/workspace/com.mycompany.myproj.iaas.rest/src/main/java/com/mycompany/myproj/iaas/api/rest/assets/MigrationUninstallModulesAsset.java:[16,18] error: package javax.ws.rs does not exist 
[ERROR] /home/jenkins1/slave_home/workspace/Build/2.x/Dev_Test/2-Mainline_Stream_official_Green_build_V2/workspace/com.mycompany.myproj.iaas.rest/src/main/java/com/mycompany/myproj/iaas/api/rest/assets/MigrationUninstallModulesAsset.java:[17,23] error: package javax.ws.rs.core does not exist 
[ERROR] /home/jenkins1/slave_home/workspace/Build/2.x/Dev_Test/2-Mainline_Stream_official_Green_build_V2/workspace/com.mycompany.myproj.iaas.rest/src/main/java/com/mycompany/myproj/iaas/api/rest/assets/MigrationUninstallModulesAsset.java:[19,41] error: package org.apache.wink.common.annotations does not exist 
[ERROR] /home/jenkins1/slave_home/workspace/Build/2.x/Dev_Test/2-Mainline_Stream_official_Green_build_V2/workspace/com.mycompany.myproj.iaas.rest/src/main/java/com/mycompany/myproj/iaas/api/rest/assets/MigrationUninstallModulesAsset.java:[23,1] error: cannot find symbol 
[ERROR] symbol: class Asset 
[ERROR] /home/jenkins1/slave_home/workspace/Build/2.x/Dev_Test/2-Mainline_Stream_official_Green_build_V2/workspace/com.mycompany.myproj.iaas.rest/src/main/java/com/mycompany/myproj/iaas/api/rest/assets/TeamAsset.java:[12,18] error: package javax.ws.rs does not exist 
[ERROR] -> [Help 1] 

Wie Sie sehen können, schlägt die Build javax.ws.rs, zu finden, da die Abhängigkeit nicht im POM ist zu erwarten ist. Was ich nicht verstehe ist, warum der Build erfolgreich ist, wenn ich die -Dmaven.local.repo unterdrücken.

Die POM:

<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> 

    <parent> 
     <groupId>com.mycompany.myproj.iaas</groupId> 
     <artifactId>root</artifactId> 
     <version>2.1.0</version> 
     <relativePath>../com.mycompany.myproj.iaas</relativePath> 
    </parent> 

    <groupId>com.mycompany.myproj.iaas</groupId> 
    <artifactId>rest</artifactId> 
    <packaging>war</packaging> 
    <name>myproj myproj-RestAPI.war</name> 
    <url>http://www.mycompany.com</url> 

    <dependencies> 
     <dependency> 
     <groupId>org.powermock</groupId> 
     <artifactId>powermock-module-junit4</artifactId> 
     <version>1.6.1</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.powermock</groupId> 
     <artifactId>powermock-api-easymock</artifactId> 
     <version>1.6.1</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.easymock</groupId> 
     <artifactId>easymock</artifactId> 
     <version>3.2</version> 
     <scope>test</scope> 
    </dependency> 
     <dependency> 
      <groupId>com.mycompany.myproj.iaas</groupId> 
      <artifactId>common</artifactId> 
      <version>${project.parent.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>com.mycompany.myproj.iaas</groupId> 
      <artifactId>bpm</artifactId> 
      <version>${project.parent.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>com.mycompany.myproj.iaas</groupId> 
      <artifactId>sql</artifactId> 
      <version>${project.parent.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.wink</groupId> 
      <artifactId>wink-server</artifactId> 
      <version>1.4</version> 
     </dependency> 
     <dependency> 
      <groupId>org.codehaus.jackson</groupId> 
      <artifactId>jackson-jaxrs</artifactId> 
      <version>1.7.4</version> 
     </dependency> 
     <dependency> 
      <groupId>org.codehaus.jackson</groupId> 
      <artifactId>jackson-xc</artifactId> 
      <version>1.7.4</version> 
     </dependency> 
     <dependency> 
      <groupId>commons-httpclient</groupId> 
      <artifactId>commons-httpclient</artifactId> 
      <version>3.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>${version.slf4j}</version> 
     </dependency> 
     <dependency> 
      <groupId>ch.qos.logback</groupId> 
      <artifactId>logback-classic</artifactId> 
      <version>${version.logback}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>jul-to-slf4j</artifactId> 
      <version>${version.slf4j}</version> 
     </dependency> 
     <dependency> 
      <groupId>log4j</groupId> 
      <artifactId>log4j</artifactId> 
      <version>1.2.16</version> 
     </dependency> 
     <dependency> 
      <groupId>org.jdom</groupId> 
      <artifactId>jdom</artifactId> 
      <version>1.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.wink</groupId> 
      <artifactId>wink-json-provider</artifactId> 
      <version>1.4</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.wink</groupId> 
      <artifactId>wink-json4j</artifactId> 
      <version>1.4</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.mail</groupId> 
      <artifactId>mail</artifactId> 
      <version>1.4</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>javax.servlet-api</artifactId> 
      <version>3.0.1</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>net.ripe.commons</groupId> 
      <artifactId>commons-ip-math</artifactId> 
      <version>1.21.1</version> 
     </dependency> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.11</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>com.ibm.db2</groupId> 
      <artifactId>db2jcc4</artifactId> 
      <version>10.5</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>com.ibm.db2</groupId> 
      <artifactId>db2jcc_license_cu</artifactId> 
      <version>10.5</version> 
      <scope>test</scope> 
     </dependency> 

    </dependencies> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-war-plugin</artifactId> 
       <configuration> 
        <archive> 
         <addMavenDescriptor>false</addMavenDescriptor> 
         <manifest> 
          <addDefaultImplementationEntries>true</addDefaultImplementationEntries> 
         </manifest> 
         <manifestEntries> 
          <Implementation-Version>${project.version}.${buildLabel}</Implementation-Version> 
         </manifestEntries> 
        </archive> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-surefire-plugin</artifactId> 
       <configuration> 
        <parallel>methods</parallel> 
        <threadCount>10</threadCount> 
       </configuration> 
       <version>2.17</version> 
      </plugin> 
     </plugins> 
    </build> 

    <description>This component builds the myproj-RestAPI.war file.</description> 
</project> 

Es ist sehr verwirrend - wenn die Abhängigkeit nicht in der POM definiert ist, wie es gelöst werden?

+1

Unklar sind diese transitiven Abhängigkeiten der Dinge in der POM erklärt? – Tunaki

+1

Warum fügen Sie nicht das Protokoll Ihrer Frage ein? – thiagoh

+0

@Tunaki die Abhängigkeiten sind nicht in der POM deklariert. Es ist in der Frage Beschreibung :) – Phil

Antwort

0

Sie haben definitiv einen Teil des Maven-Protokolls verpasst, wenn es versucht, alle Abhängigkeiten aufzulösen. Ihr Protokoll zeigt, dass es sich um einen Compiler-Fehler handelt, nicht um Maven.

Es geht immer so:

  1. Maven löst alle Abhängigkeiten einschließlich transitiv Einsen (wenn sie nicht ausgeschlossen sind)
  2. Für diese Abhängigkeiten Maven können nicht in lokalen Repo finden und dowload nicht von entfernten repos gibt es eine Warnung darüber. (Du hast es verpasst). Auch Maven versucht möglicherweise nicht, sie für einige Zeit erneut herunterzuladen - dies hängt von den Einstellungen für das Remote-Repo ab. Maven legt einen "leeren Köder" in lokales Repo für fehlende Abhängigkeiten.
  3. Maven immer noch Compiler mit allen verfügbaren Gläsern in Classpath nur weil wenn JAR als Abhängigkeit definiert bedeutet es nicht, dass es benötigt wird und Code kompiliert werden kann.
  4. Schließlich haben Sie Ihre Fehler von Compiler, weil Code tatsächlich einige Klassen aus einigen Abhängigkeiten verwendet Das ist es.

BTW: Ich verstehe nicht ganz den Zweck dieser Übung ...

+0

Mein Zweck ist nicht zu verstehen, warum der Build in einem der Fälle fehlschlägt, sondern warum und wie es im anderen Fall gut funktioniert. In einem der Szenarios wird die Erstellung problemlos abgeschlossen, obwohl die Abhängigkeit nicht im POM enthalten ist, keine transitive Abhängigkeit ist und im Protokoll nicht angezeigt wird, dass sie heruntergeladen wird. – Phil

+0

Ihre fehlgeschlagene Abhängigkeit 'javax.ws.rs' muss in der Struktur vorhanden sein, wenn Sie REST im Code verwenden. Du hast es gerade verpasst. – Vadim

+0

Nun, es ist nicht im Baum :) – Phil

Verwandte Themen