当前位置: 首页 > 知识库问答 >
问题:

可传递的Maven依赖项显示在dependency:树中,但不显示在lib目录中

斜昊空
2023-03-14

我正在使用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。怎么会这样?


共有2个答案

松旭
2023-03-14

当您构建大型java项目时,Libspring expression不在Lib目录中,而是在最小示例中。我注意到您使用的是maven 3.0.3,这个问题是由这个bug MNG-5121引起的。

元景天
2023-03-14

我使用的是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