Java Maven:项目编译时没有在pom.xml中定义依赖项
我有一个项目,我试着用两种不同的方式来构建:Java Maven:项目编译时没有在pom.xml中定义依赖项,java,maven,Java,Maven,我有一个项目,我试着用两种不同的方式来构建: 将-Dmaven.repo.local设置为仅为构建创建的全新目录 没有-Dmaven.repo.local(那么我假设它默认为~/.m2 我觉得很奇怪,当我不使用-Dmaven.repo.local时,我的项目编译得很好,即使一些依赖项不在POM中。日志没有显示从本地repo下载或解析这些依赖项(~/.m2) 如果我试图构建一个全新的本地存储库,构建就会失败,因为javac无法解析某些类(这意味着Maven和Java不知道这些依赖关系在哪里)
- 将
设置为仅为构建创建的全新目录-Dmaven.repo.local
- 没有
(那么我假设它默认为-Dmaven.repo.local
~/.m2
-Dmaven.repo.local
时,我的项目编译得很好,即使一些依赖项不在POM中。日志没有显示从本地repo下载或解析这些依赖项(~/.m2
)
如果我试图构建一个全新的本地存储库,构建就会失败,因为javac无法解析某些类(这意味着Maven和Java不知道这些依赖关系在哪里)
正如您所看到的,构建无法找到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>
4.0.0
com.mycompany.myproj.iaas
根
2.1.0
../com.mycompany.myproj.iaas
com.mycompany.myproj.iaas
休息
战争
myproj myproj-RestAPI.war
http://www.mycompany.com
org.powermock
powermock-module-junit4
1.6.1
测试
org.powermock
powermock api easymock
1.6.1
测试
org.easymock
轻松的
3.2
测试
com.mycompany.myproj.iaas
常见的
${project.parent.version}
com.mycompany.myproj.iaas
bpm
${project.parent.version}
com.mycompany.myproj.iaas
sql
${project.parent.version}
org.apache.wink
wink服务器
1.4
org.codehaus.jackson
杰克逊·贾克斯
1.7.4
org.codehaus.jackson
杰克逊xc
1.7.4
commons httpclient
commons httpclient
3.1
org.slf4j
slf4j api
${version.slf4j}
回写
回归经典
${version.logback}
org.slf4j
七月至六月
${version.slf4j}
log4j
log4j
1.2.16
org.jdom
Java文档对象模型
1.1
org.apache.wink
wink json提供程序
1.4
org.apache.wink
wink-json4j
1.4
javax.mail
邮件
1.4
假如
javax.servlet
javax.servlet-api
3.0.1
假如
net.commons
公共知识产权数学
1.21.1
朱尼特
朱尼特
4.11
测试
com.ibm.db2
db2jcc4
10.5
测试
com.ibm.db2
db2jcc许可证
10.5
测试
org.apache.maven.plugins
maven战争插件
假的
真的
${project.version}.${buildLabel}
org.apache.maven.plugins
maven surefire插件
方法
10
2.17
此组件构建myproj-RestAPI.war文件。
这是非常令人困惑的-如果POM中没有定义依赖项,它是如何解决的?当Maven日志试图解决所有依赖项时,您肯定错过了它的一部分。 您的日志显示它是一个编译器错误,而不是Maven 事情总是这样:
顺便说一句:我不完全理解这个练习的目的 不清楚,这些事物的可传递依赖关系是否在POM中声明?为什么不将日志粘贴到您的问题上?@Tunaki这些依赖关系没有在POM中声明。在问题描述中:)@thiagoh Done..good start@Phil现在你能添加pom.xml吗?我的目的不是理解为什么构建在其中一种情况下失败,而是为什么以及如何在另一种情况下工作良好。在其中一个场景中,构建完成得很好,即使依赖项不在POM中,也不是一个可传递的依赖项,并且日志从未显示它正在下载。如果在代码中使用REST,则失败的依赖项
javax.ws.rs
必须在树中。你只是错过了。它不在树上:)
<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>