我有一个使用我创建的jar的maven Web应用程序,并在我的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>
我的战争pom看起来像:
<dependency>
<groupId>group</groupId>
<artifactId>artifact</artifactId>
<version>1.0.7</version>
</dependency>
并配置了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>
答案 0 :(得分:1)
Maven已经解决了传递依赖。
它并不表示你可能做得不对:你创建的另一个jar应该是一个带有自己的pom的Maven项目,至少在本地通过mvn install
安装,并列为第二个项目中的依赖项(使用它的那个)。
使用jar的项目只需要指定该工件作为其依赖项,其他项目的依赖项将被传递确定并包含为项目依赖项。
答案 1 :(得分:1)
@Dave Newton回答说,这应该是默认情况下发生的。
问题中片段的一些观察 - 如果这有帮助......
将依赖的jar包装为artifact
项目jar的文件夹。
将maven war plugin jar本身定义为maven war插件的dependency
- 这根本不需要!
war:manifest
目标。
实际创建战争的war:war
可能无法运行。