0

我有一个 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>

我的战争 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>
4

2 回答 2

1

Maven 已经解决了传递依赖。

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

使用 jar 的项目只需要指定该工件作为其依赖项,其他项目的依赖项将被传递确定并包含为项目依赖项。

于 2012-06-06T21:59:09.173 回答
1

@Dave Newton 已经回答,这应该默认发生。

从问题中的片段中得到一些观察 - 如果这有帮助......

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

  • 将 maven 战争插件 jar 本身定义dependency为 maven 战争插件 - 这根本不是必需的!

  • war:manifestMaven 战争插件配置中的目标。

实际制造战争的可能war:war没有运行。

于 2012-06-07T04:46:37.743 回答