2017-02-17 41 views
0

定义依赖我有一个项目,我在两种不同的方式试图建设:的Maven:项目编译没有在pom.xml中

  • 随着-Dmaven.repo.local设置为只为构建创造了一个全新的目录。
  • 没有-Dmaven.repo.local(那么我想它默认为~/.m2

我发现很奇怪,我的项目编译就好了,当我不使用-Dmaven.repo.local,即使一些依赖是不是在POM,日志不显示这些依赖下载或解决从本地回购(~/.m2)。

如果我尝试建立指定一个全新的本地资源库,构建因为javac是无法化解一些类失败(意味着Maven和Java不知道这些依赖关系在哪里)。

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

正如你所看到的,构建没有找到javax.ws.rs,这是意料之中的,因为依赖是不是在POM。我不明白的是当我压制-Dmaven.local.repo时,构建成功的原因。

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

这是非常令人困惑 - 如果依赖没有在POM定义,它是如何得到解决?

+1

不清楚,是在POM宣布这些事情传递依赖? – Tunaki

+1

为什么不粘贴你的问题上的日志? – thiagoh

+0

@Tunaki POM中没有声明依赖关系。这是在问题描述:) – Phil

回答

0

你一定错过了Maven的日志的一部分,当它试图解决所有的依赖关系。 您的日志显示它不是Maven的编译器错误。

之后,一直都会这样:

  1. Maven的解决所有的依赖,包括传递者(如果他们不排除)
  2. 对于那些依赖的Maven不能在本地回购发现并不能从远程回购有下载中心关于它的警告。 (你错过了)。 另外,Maven可能不会尝试在一段时间内再次下载它们 - 这取决于远程回购设置)。 Maven将一些“空诱饵”放入缺失依赖项的本地回购站中。
  3. 的Maven仍然会在类路径 所有可用的罐子编译器只是因为如果罐子定义为依赖,这并不意味着它需要和代码可以编译。
  4. 最后你从编译器得到了你的错误,因为代码实际上使用一些依赖 就是这样一些类。

BTW:我不明白,运动的完全的目的...

+0

我的目的不是理解为什么构建在其中一个案例中失败,但是为什么以及如何在另一个案例中运行良好。在其中一个场景中,即使依赖项不在POM中,构建完成也很好,不是传递依赖项,而且日志也不会显示它正在下载。 – Phil

+0

如果在代码中使用REST,那么失败的依赖项'javax.ws.rs'必须存在于树中。你错过了它。 – Vadim

+0

好吧,它不在树上:) – Phil

相关问题