【问题标题】:Maven package doesn't include all the dependecy's JARsMaven 包不包含所有依赖项的 JAR
【发布时间】:2014-06-08 17:57:30
【问题描述】:

我正在为 Java Web 应用程序创建一个 WAR。问题是在 WAR 内部,在 /WEB-INF/lib 中只包含了几个 JAR。

这是我的 POM.xml:

    <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">
<!--
*****THIS IS AN AUTOGENERATED POM; PLEASE DO NOT MODIFY OR COMMIT ANY CHANGES*****
-->
   <parent>
    ...
   </parent>
    ...
      <scm>  
          ...
   </scm>
   <packaging>war</packaging>
   <dependencies>
    <dependency>
       ...
    </dependency>
    ...
   </dependencies>  
   <build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
        </plugin>
    </plugins>
   </build>
   <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <javancss.fail>false</javancss.fail>
        <checkstyle.fail>false</checkstyle.fail>
        <cobertura.fail>true</cobertura.fail>
        <pmd.fail>true</pmd.fail>
        <findbugs.fail>false</findbugs.fail>
   </properties>    
</project>

例如,我有来自不同 Spring 模块的 5 个依赖项,但我只看到一个包。

我所有的依赖项都有一个“编译”范围。

为什么会这样?

问候。

【问题讨论】:

    标签: java maven jar dependencies maven-package


    【解决方案1】:

    好的,我没有注意到我拥有的其他项目中“包含”了缺少的依赖项,而这些项目希望提供这些依赖项。

    这就是为什么这些依赖项在有效 pom 中显示为“已提供”。

    我在我的 POM 中锁定了依赖项以确保它们具有“编译”范围:

    <dependencyManagement>
        <dependencies>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-web</artifactId>
                    <version>3.0.6.RELEASE</version>
                    <scope>compile</scope>
                </dependency>
                ..
        </dependencies>
     </dependencyManagement>
    

    现在依赖项已成功包含在 WEB-INFO/lib 中,并且它解决了我每次尝试部署时出现以下错误的问题:

    java.lang.ClassNotFoundException: org.springframework.context.ApplicationContext 
    

    我觉得自己很笨……

    感谢您的帮助。

    【讨论】:

      【解决方案2】:

      您可能还对 maven-shade-plugin 感兴趣 - 它可以从您的所有依赖项中生成一个大罐子。

      http://maven.apache.org/plugins/maven-shade-plugin/

      【讨论】:

        【解决方案3】:

        默认情况下它不会在你的包中打包依赖库,你需要指示插件这样做

        【讨论】:

        • 但它包含一些依赖项,而另一些则不包含。都具有相同的范围。
        • 对于 jar 文件当然可以,但对于战争来说,它应该默认将所有 maven 依赖项放在 WEB-INF/lib 中,除非你在 packagingExcludes 部分中放置了 packagingExcludes 标签。
        • 你能发帖mvn help:effective-pom
        • 查看有效pom,我缺少的依赖项被用作“提供”。
        • provided 表示它将在运行时提供,所以不要添加
        猜你喜欢
        • 1970-01-01
        • 2023-03-30
        • 1970-01-01
        • 2012-04-01
        • 2018-11-16
        • 2017-02-01
        • 2010-12-16
        • 2016-06-04
        相关资源
        最近更新 更多