如何在maven项目中公开依赖项的依赖项

如何在maven项目中公开依赖项的依赖项,maven,dependency-management,Maven,Dependency Management,我有一个maven web应用程序,它使用我创建的jar,并在pom文件中作为依赖项引用 我创建的jar文件有另一个jar文件作为依赖项 当我部署web应用程序时,它说在我创建的jar文件的依赖项中找不到一个类 解决这个问题的唯一方法是将jar文件的依赖项添加为war文件的依赖项。这似乎没有必要 有没有一种方法可以配置war文件,使其能够查看在依赖jar文件的依赖项中定义的类 我的jar pom文件看起来像:包含找不到的类的依赖项是QRS依赖项 <project xmlns="http:/

我有一个maven web应用程序,它使用我创建的jar,并在pom文件中作为依赖项引用

我创建的jar文件有另一个jar文件作为依赖项

当我部署web应用程序时,它说在我创建的jar文件的依赖项中找不到一个类

解决这个问题的唯一方法是将jar文件的依赖项添加为war文件的依赖项。这似乎没有必要

有没有一种方法可以配置war文件,使其能够查看在依赖jar文件的依赖项中定义的类

我的jar pom文件看起来像:包含找不到的类的依赖项是QRS依赖项

<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>group</groupId>
<artifactId>artifact</artifactId>
<packaging>jar</packaging>
<version>1.0.7</version>
<name>name</name>
<dependencies>
    <dependency>
        <groupId>group2</groupId>
        <artifactId>QRS</artifactId>
        <version>8.1</version>
    </dependency>
</dependencies>
    <build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.3</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib</classpathPrefix>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <id>copy-dependencies</id>
                    <phase>prepare-package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${project.build.directory}/classes/lib</outputDirectory>
                        <overWriteReleases>false</overWriteReleases>
                        <overWriteSnapshots>false</overWriteSnapshots>
                        <overWriteIfNewer>true</overWriteIfNewer>
                    </configuration>
                </execution>
            </executions>
        </plugin>

4.0.0
组
人工制品
罐子
1.0.7
名称
第2组
QRS波
8.1
org.apache.maven.plugins
maven jar插件
2.3
真的
解放党
org.apache.maven.plugins
maven依赖插件
复制依赖项
准备包装
复制依赖项
${project.build.directory}/classes/lib
假的
假的
真的
我的war pom看起来像:

   <dependency>
        <groupId>group</groupId>
        <artifactId>artifact</artifactId>
        <version>1.0.7</version>
    </dependency>

组
人工制品
1.0.7
并且配置了war插件:

          <plugin>
            <dependencies>
                <dependency>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>2.2</version>
                </dependency>
            </dependencies>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.2</version>
            <configuration>
                <warName>${project.name}-${project.version}-${env}</warName>
                <webResources>
                    <resource>
                        <directory>src/main/webapp/WEB-INF</directory>
                        <filtering>true</filtering>
                        <include>jboss-web.xml</include>
                        <include>web.xml</include>
                        <targetPath>/WEB-INF</targetPath>
                    </resource>
                </webResources>
                <warSourceExcludes>**/toAggregateAndRemove/**</warSourceExcludes>
                <goal>war:manifest</goal>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                    </manifest>
                </archive>
            </configuration>
        </plugin>

org.apache.maven.plugins
maven战争插件
2.2
org.apache.maven.plugins
maven战争插件
2.2
${project.name}-${project.version}-${env}
src/main/webapp/WEB-INF
真的
jboss-web.xml
web.xml
/WEB-INF
**/癞蛤蟆/**
战争:舱单
真的
解放党/

Maven已经解决了可传递依赖项

它不是表示您可能做得不对:您创建的另一个jar应该是一个具有自己pom的Maven项目,至少通过
mvn install
在本地安装,并作为依赖项列在第二个项目(使用它的项目)中


使用jar的项目只需将该工件指定为其依赖项,其他项目的依赖项将通过传递方式确定并包含为项目依赖项。

@Dave Newton已回答,默认情况下应该这样做

从问题片段中的一些观察结果-如果这有帮助的话

  • 将依赖jar打包为项目jar的
    工件的文件夹

  • 将maven war插件jar本身定义为maven war插件的
    依赖项
    ——这根本不是必需的

  • war:manifest
    maven-war插件配置中的目标


有可能实际创建war的
war:war
没有运行。

另一个jar是一个有自己pom的maven项目,被拉到我的本地响应中,作为war文件的依赖项列出,并将可传递的依赖项列为依赖项war文件只是将jar文件列为依赖项,而不是可传递依赖项。@Eric如何/部署什么?Maven不会神奇地创建一个包含所有其他类(除了你自己的类)的uber jar,除非你告诉它。您还可以使用Maven将项目依赖项复制到一个目录中,例如,将它们包含在tar文件中。否则编译时依赖关系就是编译时依赖关系。我正在将war文件部署到jboss。我让maven将jar文件的依赖项复制到实际的jar文件中。当我在web项目中查看jar文件时,我会看到所有依赖的jar文件,包括缺少类的jar文件。它编译得很好,只是无法部署,因为spring试图实例化bean,但却无法,因为它无法在dependency@Eric然后,您需要编辑您的问题,并提供有关web应用程序pom的更多信息,可能是一些依赖项的pom,等等。除了“它不起作用”之外,你并没有提供太多可以继续下去的东西。您还可以使用
依赖关系
插件查看Maven认为您的依赖关系树是什么样子
mvn依赖关系:tree
@Eric您不需要为您的war执行手动依赖关系管理;创建一个
war
工件可以为您做到这一点。但是,如果所有依赖项都位于
WEB-INF/lib
目录中,那么显然,这与Maven没有任何关系。