Maven打包不包含所有依赖的JAR包

3
我将会翻译以下内容:

我正在为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个依赖项,但是在包中我只看到一个。
我的所有依赖项都具有“compile”范围。
为什么会发生这种情况?
敬礼。
3个回答

2

默认情况下,它不会在您的包中打包依赖库,您需要指示插件执行此操作。

请参阅


但它包含一些依赖项,而其他一些则不包括。所有的依赖项都具有相同的范围。 - pfernandom
对于一个jar文件来说,是的,但对于war文件来说,默认情况下应该将所有maven依赖项放在WEB-INF/lib中,除非您在maven-war-plugin部分中添加了一个packagingExcludes标签。 - azurefrog
你能发布 mvn help:effective-pom 吗? - jmj
查看effective-pom文件,我缺少的依赖项被标记为“provided”。 - pfernandom
提供的意思是它将在运行时提供,因此不要添加。 - jmj
Maven POM 参考文档中提到:provided - 这与 compile 类似,但表示您期望 JDK 或容器在运行时提供它。它仅在编译和测试类路径上可用,并且不是传递性的。 - azurefrog

1

好的,我没有注意到缺失的依赖项已经“包含”在我拥有的其他项目中,并且这些项目期望这些依赖项被提供。

这就是为什么这些依赖项在effective-pom中显示为“provided”的原因。

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

<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 

我感觉很蠢...

谢谢你的帮助。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接