我正在使用Maven 3.0.3构建一个大型java项目。我的pom。xml有一个父级,它依赖于spring上下文
(编译范围),后者又依赖于spring表达式
(也在编译范围内)。当我用mvn:dependencyTree
创建依赖关系树时,一切看起来都很好,spring表达式库在编译范围内显示为可传递依赖关系。但是,如果我使用
mvn help:effective pom
构建有效的pom,则spring expression
的条目将丢失。另外,如果我构建项目,spring expression
的lib不包含在lib目录中,而spring context
的lib不包含在lib目录中。
直到最近,库才被包含在构建中,现在某个依赖项似乎发生了变化。但是
sping-上下文
仍然在编译范围内,并显示在依赖树中,所以我不明白为什么这应该改变行为。
此外,更新Maven(这似乎解决了一个可能相关的问题)也不是一个选择。我已经暂时解决了这个问题,将
sping-expression
作为一个直接的而不是传递的依赖项添加到我的项目中,但是我不想用已经存在的东西堵塞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>
<groupId>org.test.project</groupId>
<artifactId>test-project</artifactId>
<packaging>war</packaging>
<version>0.1-SNAPSHOT</version>
<name>Test Project</name>
<properties>
<spring.version>3.2.4.RELEASE</spring.version>
</properties>
<dependencies>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</project>
它的工作原理是,可传递的依赖关系
spring表达式
显示在mvn:dependencyTree
的输出中:
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Test Project 0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ test-project ---
[INFO] org.test.project:test-project:war:0.1-SNAPSHOT
[INFO] \- org.springframework:spring-context:jar:3.2.4.RELEASE:runtime
[INFO] +- org.springframework:spring-aop:jar:3.2.4.RELEASE:runtime
[INFO] | \- aopalliance:aopalliance:jar:1.0:runtime
[INFO] +- org.springframework:spring-beans:jar:3.2.4.RELEASE:runtime
[INFO] +- org.springframework:spring-core:jar:3.2.4.RELEASE:runtime
[INFO] | \- commons-logging:commons-logging:jar:1.1.1:runtime
[INFO] \- org.springframework:spring-expression:jar:3.2.4.RELEASE:runtime
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.922s
[INFO] Finished at: Thu Apr 10 16:17:42 CEST 2014
[INFO] Final Memory: 5M/15M
[INFO] ------------------------------------------------------------------------
且不在有效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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.test.project</groupId>
<artifactId>test-project</artifactId>
<version>0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>Test Project</name>
<distributionManagement>
<repository>
<id>internal_repo</id>
<name>Repository for internal artefacts</name>
<url>http://internal/url</url>
</repository>
<snapshotRepository>
<id>internal_repo</id>
<name>Repository for internal artefacts</name>
<url>http://internal/url</url>
</snapshotRepository>
</distributionManagement>
<properties>
<downloadJavadocs>true</downloadJavadocs>
<downloadSources>true</downloadSources>
<spring.version>3.2.4.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.2.4.RELEASE</version>
<scope>runtime</scope>
</dependency>
</dependencies>
<repositories>
<repository>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
<id>central</id>
<url>http://internal/url</url>
</repository>
<repository>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
<id>maven3</id>
<url>http://internal/url</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
<id>central</id>
<url>http://internal/url</url>
</pluginRepository>
<pluginRepository>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
<id>maven3</id>
<url>http://internal/url</url>
</pluginRepository>
</pluginRepositories>
<build>
<sourceDirectory>c:\projects\test-project\src\main\java</sourceDirectory>
<scriptSourceDirectory>c:\projects\test-project\src\main\scripts</scriptSourceDirectory>
<testSourceDirectory>c:\projects\test-project\src\test\java</testSourceDirectory>
<outputDirectory>c:\projects\test-project\target\classes</outputDirectory>
<testOutputDirectory>c:\projects\test-project\target\test-classes</testOutputDirectory>
<resources>
<resource>
<directory>c:\projects\test-project\src\main\resources</directory>
</resource>
</resources>
<testResources>
<testResource>
<directory>c:\projects\test-project\src\test\resources</directory>
</testResource>
</testResources>
<directory>c:\projects\test-project\target</directory>
<finalName>test-project-0.1-SNAPSHOT</finalName>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.3</version>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-5</version>
</plugin>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.1</version>
</plugin>
<plugin>
<artifactId>maven-release-plugin</artifactId>
<version>2.0</version>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>2.4.1</version>
<executions>
<execution>
<id>default-clean</id>
<phase>clean</phase>
<goals>
<goal>clean</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.3.1</version>
<executions>
<execution>
<id>default-install</id>
<phase>install</phase>
<goals>
<goal>install</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.4.3</version>
<executions>
<execution>
<id>default-resources</id>
<phase>process-resources</phase>
<goals>
<goal>resources</goal>
</goals>
</execution>
<execution>
<id>default-testResources</id>
<phase>process-test-resources</phase>
<goals>
<goal>testResources</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.7.2</version>
<executions>
<execution>
<id>default-test</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<executions>
<execution>
<id>default-testCompile</id>
<phase>test-compile</phase>
<goals>
<goal>testCompile</goal>
</goals>
</execution>
<execution>
<id>default-compile</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<executions>
<execution>
<id>default-war</id>
<phase>package</phase>
<goals>
<goal>war</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.5</version>
<executions>
<execution>
<id>default-deploy</id>
<phase>deploy</phase>
<goals>
<goal>deploy</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>2.0.1</version>
<executions>
<execution>
<id>default-site</id>
<phase>site</phase>
<goals>
<goal>site</goal>
</goals>
<configuration>
<outputDirectory>c:\projects\test-project\target\site</outputDirectory>
<reportPlugins>
<reportPlugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
</reportPlugin>
</reportPlugins>
</configuration>
</execution>
<execution>
<id>default-deploy</id>
<phase>site-deploy</phase>
<goals>
<goal>deploy</goal>
</goals>
<configuration>
<outputDirectory>c:\projects\test-project\target\site</outputDirectory>
<reportPlugins>
<reportPlugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
</reportPlugin>
</reportPlugins>
</configuration>
</execution>
</executions>
<configuration>
<outputDirectory>c:\projects\test-project\target\site</outputDirectory>
<reportPlugins>
<reportPlugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
</reportPlugin>
</reportPlugins>
</configuration>
</plugin>
</plugins>
</build>
<reporting>
<outputDirectory>c:\projects\test-project\target\site</outputDirectory>
</reporting>
</project>
然而,当我构建项目时,lib目录确实在这个例子中包含了
sping-expression
。怎么会这样?
当您构建大型java项目时,Libspring expression
不在Lib目录中,而是在最小示例中。我注意到您使用的是maven 3.0.3,这个问题是由这个bug MNG-5121引起的。
我使用的是maven 3.1.1,依赖项spring表达式
已正确添加到WEB-INF/lib中。有效pom不包含spring表达式
,但这是正常的,因为有效pom不解析可传递依赖项。
有效的pom只是一个合并的xml文件,当前的pom加上它的所有父文件合并在一起。只有在构建了有效的pom之后,才会应用maven依赖解决机制。
这就是为什么有效pom只包含spring上下文
依赖项的原因,因为这是pom中唯一指定的内容。xml。如果父pom中存在父依赖项,那么它们也会显示在有效pom中。
这是我的mvn dependency:tree的输出:
INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ test-project ---
[INFO] org.test.project:test-project:war:0.1-SNAPSHOT
[INFO] \- org.springframework:spring-context:jar:3.2.4.RELEASE:runtime
[INFO] +- org.springframework:spring-aop:jar:3.2.4.RELEASE:runtime
[INFO] | \- aopalliance:aopalliance:jar:1.0:runtime
[INFO] +- org.springframework:spring-beans:jar:3.2.4.RELEASE:runtime
[INFO] +- org.springframework:spring-core:jar:3.2.4.RELEASE:runtime
[INFO] | \- commons-logging:commons-logging:jar:1.1.1:runtime
[INFO] \- org.springframework:spring-expression:jar:3.2.4.RELEASE:runtime
这是我的WEB-INF/lib内容:
aopalliance-1.0.jar
commons-logging-1.1.1.jar
spring-aop-3.2.4.RELEASE.jar
spring-html" target="_blank">beans-3.2.4.RELEASE.jar
spring-context-3.2.4.RELEASE.jar
spring-core-3.2.4.RELEASE.jar
spring-expression-3.2.4.RELEASE.jar
因此,问题似乎是对有效的pom特性的一些误解,以及由于maven bug而在WEB-INF库中缺少的依赖项spring expression
:这个问题可以通过版本升级或pom上的硬编码依赖项来解决,正如您发现的那样。
问题内容: Maven常见的调试技术是使用mvndependency:tree查看项目依赖关系图。 但是,此列表显示项目依赖关系,而不是每个插件的插件依赖关系树。有什么办法可以从项目中做到这一点吗? 问题答案: 通过mvn -X的输出将间接打印出信息。当前没有其他选择来获取Maven-Plugin的依赖项。 更新 您可以使用以下命令获取插件依赖项列表(依赖项插件中的resolve- plugin目
当我有一个包含POM的项目时,例如: 但是我似乎弄错了,Internet上的Maven文档并没有帮助我解决这个问题。 有什么想法吗?
问题内容: 在Eclipse中,当我转到Maven Dependency Hierarchy页面时,得到的输出 指出什么冲突导致版本被省略: Eclipse Maven版本 但是,如果我使用dependency:tree,则将 其省略,而我只会看到实际使用的evrsions : And later on the actually referenced versions… Is there any
我创建了一个Maven项目(可重用库),该项目有许多依赖项(编译时和运行时),它们也可以过渡地依赖于其他许多依赖项。在maven中,我可以在pom中添加依赖项。xml及其可传递依赖关系将自动处理。所以,我将毫无问题地运行。 现在,我有一个非Maven(基于Ant的)项目,上面创建的库(Maven Lib)将使用它。 在这种情况下,运行时间
这是我现在面临的一个奇怪的问题。从我的应用程序中,我从JSON文件中从链接中获取数据,然后用Volley解析它。现在我想在一个看起来不起作用的RecyclerView上显示数据,我很高兴我的代码很好,但是有些东西似乎不起作用,我找不到它。 这是活动代码 HomeActivity.java: 这是我从适配器中扩展的布局,并从JSON文件中设置数据 和适配器类相关的代码,我猜: @Override p
我正在尝试使用Firebase创建一个实时数据库。我遵循了原则,但显示出错误。 我的build.gradle应用如下: 还有我的身材。格拉德尔项目: 在控制台中显示错误: > 无法解决配置: app:_debugApkCopy的所有依赖项。无法解决com.firebase: Firebase-client-android: 2.5.2.必需的:project: app:未指定无法解决com.fir