如何将外部jar添加到maven webapp项目

时间:2012-05-19 12:17:53

标签: maven

我有一个Spring roo项目(基本上是一个maven项目)。我想将dropbox sdk添加到项目中,问题是它不在maven中。我添加了以下文件

    <dependency>
        <groupId>com.dropbox</groupId>
        <artifactId>dropbox-sdk</artifactId>
        <version>1.3.1</version>
        <scope>system</scope>
        <systemPath>${project.basedir}/libs/dropbox-java-sdk-1.3.1.jar</systemPath>
    </dependency>

它解决了编译错误,但是当我运行项目时,在Spring Tool Suite中,jar文件没有添加到war lib文件夹中。如何让maven将我的外部jar文件添加到war lib文件夹中?

我不想在maven中安装jar,因为我必须在使用该项目的所有机器中安装它

7 个答案:

答案 0 :(得分:13)

我终于找到了一个简洁的解决方案,实现起来要容易得多。您在java项目中添加了一个项目内存储库,并在pom中链接到它。

您可以在maven中添加项目内存储库,如下所示:

<repository>
    <id>in-project</id>
        <name>In Project Repo</name>
        <url>file://${project.basedir}/libs</url>
</repository>

然后在项目的根文件夹中创建一个类似于此

的文件夹结构
/groupId/artifactId/version/artifactId-version.jar

并像往常一样添加依赖项。

此方法所需的代码和工作量最少,如果该库已添加到maven存储库中,则可以随时删除项目内存储库。

http://bit.ly/OGVHSN

答案 1 :(得分:3)

我不推荐这种方法,但您可以添加一些POM配置以在单独的配置文件中安装第三方依赖项:

<profiles>
    <profile>
        <id>install-dependencies</id>
        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-install-plugin</artifactId>
                    <version>2.3.1</version>
                    <executions>
                        <execution>
                            <id>install-dropbox-sdk</id>
                            <phase>validate</phase>
                            <goals>
                                <goal>install-file</goal>
                            </goals>
                            <configuration>
                                <groupId>com.dropbox</groupId>
                                <artifactId>dropbox-sdk</artifactId>
                                <version>1.3.1</version>
                                <file>src/main/lib/dropbox-java-sdk-1.3.1.jar</file>
                                <packaging>jar</packaging>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>

    <profile>
        <id>build</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>

        <dependencies>
            <dependency>
                <groupId>com.dropbox</groupId>
                <artifactId>dropbox-sdk</artifactId>
                <version>1.3.1</version>
            </dependency>
        </dependencies>
    </profile>
</profiles>

此处有两个配置文件:install-dependenciesbuild。第一个将dropbox-sdk依赖项安装到您的Maven存储库中,需要在每台机器上运行一次,如下所示:

mvn -Pinstall-dependencies validate

默认情况下启用第二个,并将Dropbox SDK添加为依赖项。

说实话,这并不比运行

好多少
mvn install:install-file -Dfile=src/main/lib/dropbox-java-sdk-1.3.1.jar -DgroupId=com.dropbox -DartifactId=dropbox-sdk -Dversion=1.3.1 -Dpackaging=jar

在每台机器上。

这种方法的另一个缺点是你必须将dropbox-sdk的所有依赖项添加到你的构建中 - 而如果通过将JAR和POM添加到存储库服务器来正确完成,然后Maven将正确计算传递依赖性。

答案 2 :(得分:3)

解决此问题的最佳方法是将这些本地jar文件添加到WEB-INF / lib文件夹中。您将在最终的war文件中找到所有这些罐子。

答案 3 :(得分:2)

我建议在Maven存储库服务器(如Nexus或Artifactory)中创建“第三方”存储库,然后将jar上传到那里。即使这意味着将jar放入Maven,至少使用存储库服务器,任何将构建应用程序的人都可以使用它。

答案 4 :(得分:2)

有一个更简单的解决方案,即在插件中设置webResource。通过该解决方案,您可以将本地磁盘的任何文件添加到战争中!样本如下,

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
                <warName>api</warName>
                <webResources>
                    <resource>
                        <directory>libs/</directory>
                        <targetPath>WEB-INF/lib</targetPath>
                        <includes>
                            <include>**/*.jar</include>
                        </includes>
                    </resource>
                </webResources>
            </configuration>
        </plugin>

答案 5 :(得分:0)

  1. 将lib路径更改为: 的src /主/ web应用/ WEB-INF / lib中

  2. pom.xml中的
  3. <systemPath>${project.basedir}/src/main/webapp/WEB-INF/lib/xxxx.jar</systemPath>

答案 6 :(得分:-1)

我知道我已经很晚了但是我想知道你为什么不放入.m2文件中的本地仓库中的jar并从那里添加对pom的引用?