12

我有一个 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,因为我必须在所有使用该项目的机器上安装它

4

7 回答 7

14

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

您在 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

于 2012-08-07T01:32:00.567 回答
6

有一个更简单的解决方案,即在插件中设置 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>
于 2016-07-16T06:19:06.933 回答
6

解决此问题的最佳方法是将这些本地 jar 文件添加到 WEB-INF/lib 文件夹。然后,您会发现所有这些 jar 包都打包在最终的 war 文件中。

于 2017-02-23T02:09:11.680 回答
3

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

<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 将正确计算传递依赖项.

于 2012-05-20T18:45:23.020 回答
2

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

于 2012-05-19T16:08:34.873 回答
0
  1. 将库路径更改为:src/main/webapp/WEB-INF/lib

  2. 在 pom.xml 中:

    <systemPath>${project.basedir}/src/main/webapp/WEB-INF/lib/xxxx.jar</systemPath>

于 2014-03-05T03:10:22.423 回答
-1

我知道我真的迟到了,但我想知道为什么你不将 jar 放入 .m2 文件的本地 repo 中并从那里添加对 pom 的引用?

于 2013-09-17T19:01:16.947 回答