如何在maven项目中公开依赖项的依赖项
我有一个maven web应用程序,它使用我创建的jar,并在pom文件中作为依赖项引用 我创建的jar文件有另一个jar文件作为依赖项 当我部署web应用程序时,它说在我创建的jar文件的依赖项中找不到一个类 解决这个问题的唯一方法是将jar文件的依赖项添加为war文件的依赖项。这似乎没有必要 有没有一种方法可以配置war文件,使其能够查看在依赖jar文件的依赖项中定义的类 我的jar pom文件看起来像:包含找不到的类的依赖项是QRS依赖项如何在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:/
<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插件的
——这根本不是必需的依赖项
maven-war插件配置中的目标war:manifest
有可能实际创建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没有任何关系。