Maven: 将自定义外部 JAR 链接到我的项目的最佳方式?

这是我学习 Maven 的最初几天,我还在努力学习基础知识。我有一个外部的。Jar 文件(在公共回购协议中不可用) ,我需要在我的项目中引用,我试图找出我的最佳选择是什么。

这是一个小规模的项目,没有库的中央存储库,所以它必须是一个本地存储库(以某种方式添加到源代码控制,不知道它是否应该这样工作?)或者。Jar 需要存储在任何正式存储库之外的磁盘上。

1)我最好的选择是什么。如果我想让项目和库都处于源代码控制中,那么我的项目的参考文件中的 jar 文件是什么呢?

2)我似乎仍然不能让 Eclipse 看到依赖关系。我手动将它添加到 pom 部分,它在 m2eclipse 的 Dependency 列表中显示得很好。Mvn 编译和 mvn 包都成功了,但是运行程序的结果是:

Exception in thread "main" java.lang.Error: Unresolved compilation problems:
LibraryStuff cannot be resolved to a type

这是在将 POM 编辑为:

<dependency>
<groupId>stuff</groupId>
<artifactId>library</artifactId>
<version>1.0</version>
<systemPath>${lib.location}/MyLibrary.jar</systemPath>
<scope>system</scope>
</dependency>

我是否应该执行 mvn install: install-file,即使我已经像上面那样编辑了 pom.xml?

谢谢!

343406 次浏览

Xml 将查看本地存储库,尝试找到与工件匹配的依赖项。 另外,您实际上不应该使用 system 作用域或 systemPath 属性,这些属性通常是为 JDK 中的内容而不是 JRE 中的内容保留的

有关如何安装 maven 工件,请参见此 有个问题

我认为您应该使用 mvn install:install-file用库 jar 填充本地存储库,然后您应该将范围从系统更改为编译。

如果你从 maven 开始,我建议直接使用 maven 而不是 IDE 插件,因为它增加了额外的复杂性。

至于错误,是否将所需的 jar 放在类路径上?如果您正在使用库中的类型,那么您也需要在运行时中访问它。这和 Maven 本身没有关系。

我不明白你为什么要把库放在源代码控制-它是源代码,而不是二进制罐。

美芬手册 说做这样:

mvn install:install-file -Dfile=non-maven-proj.jar -DgroupId=some.group -DartifactId=non-maven-proj -Dversion=1 -Dpackaging=jar

这里最好的解决方案是安装一个存储库: Nexus 或 ArtiFactory。如果给你一个地方放这样的东西,并进一步加快从外部缓存你的东西。

如果您正在处理的事情是开放源码的,那么您也可以考虑将 放在中心位置。

参见 向导

不要使用 systemPath。与人们在这里所说的相反,您可以将一个外部 jar 放在签出项目目录下的一个文件夹中,并且 Haven Maven 可以像其他依赖项一样找到它。以下是两个关键步骤:

  1. 使用“ mvn install: install-file”和 -DlocalRepositoryPath。
  2. 配置存储库以指向 POM 中的路径。

它相当简单,你可以在这里找到一个逐步的例子: Http://randomizedsort.blogspot.com/2011/10/configuring-maven-to-use-local-library.html

您可以创建一个 In Project Repository,这样就不必每次在新计算机上工作时都使用 run mvn install:install-file

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


<dependency>
<groupId>dropbox</groupId>
<artifactId>dropbox-sdk</artifactId>
<version>1.3.1</version>
</dependency>

/groupId/artifactId/version/artifactId-verion. jar

详细阅读这篇博客文章

Https://web.archive.org/web/20121026021311/charlie.cu.cc/2012/06/how-add-external-libraries-maven

更新 我们刚刚安装了我们自己的 Nexus 服务器,更加简单和干净。

在我们公司,我们有一些 jar,我们有一些很常见的 jar,但是没有托管在任何专门的存储库中,我们也不想把它们放在本地存储中。 我们在 Github 上创建了一个非常简单的 mvn (public) repo (但是您可以在任何服务器或本地托管它) :
注意 ,这只适用于管理一些很少更改的 jar 文件

  1. 在 GitHub 上创建回购协议:
    https://github.com/<user_name>/mvn-repo/

  2. 在 pom.xml 中添加 Repository
    (请注意,完整路径原始文件将与 repo 名称略有不同) < br/>

    <repository>
    <id>project-common</id>
    <name>Project Common</name>
    <url>https://github.com/<user_name>/mvn-repo/raw/master/</url>
    </repository>
    
  3. Add dependency to host (Github or private server)
    a. All you need to know is that files are stored in the pattern mentioned by @glitch
    /groupId/artifactId/version/artifactId-version.jar
    b. On your host create the folders to match this pattern.
    i.e if you have a jar file named service-sdk-0.0.1.jar, create the folder service-sdk/service-sdk/0.0.1/ and place the jar file service-sdk-0.0.1.jar into it.
    c. Test it by trying to download the jar from a browser (in our case: https://github.com/<user_name>/mvn-repo/raw/master/service-sdk/service-sdk/0.0.1/service-sdk-0.0.1.jar

  4. Add dependency to your pom.xml file:

    <dependency>
    <groupId>service-sdk</groupId>
    <artifactId>service-sdk</artifactId>
    <version>0.0.1</version>
    </dependency>
    
  5. Enjoy

这可以通过使用嵌套在 < 依赖项 > 元素中的 < scope > 元素轻松实现。

例如:

 <dependencies>
<dependency>
<groupId>ldapjdk</groupId>
<artifactId>ldapjdk</artifactId>
<scope>system</scope>
<version>1.0</version>
<systemPath>${basedir}\src\lib\ldapjdk.jar</systemPath>
</dependency>
</dependencies>

参考资料: http://www.tutorialspoint.com/maven/maven_external_dependencies.htm

如果外部 jar 是由 Maven 项目创建的,那么您只能在系统上复制整个项目并运行

mvn install

这将把 jar 添加到.m2目录中,这个目录是本地 maven 存储库。

现在可以添加

<dependency>
<groupId>copy-from-the=maven-pom-of-existing-project</groupId>
<artifactId>copy-from-the=maven-pom-of-existing-project</artifactId>
<version>copy-from-the=maven-pom-of-existing-project</version>
</dependency>

这将确保你

mvn exec:java

工程。如果你使用 建议在这里

<scope>system</scope>

然后,您必须在通过命令行执行时单独添加类。

可以通过以下命令 这里描述的添加外部 jar

mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> \
-DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>

改变你的 SystemPath 系统路径

<dependency>
<groupId>stuff</groupId>
<artifactId>library</artifactId>
<version>1.0</version>
<systemPath>${project.basedir}/MyLibrary.jar</systemPath>
<scope>system</scope>
</dependency>

如果您遇到相同的问题,并且您使用的是弹簧引导 V1.4 + ,您可以这样做。

有一个 包括 SystemScope,您可以使用它向 jar 添加系统范围依赖项。

例如:。

我在我的项目中使用了 Oracle 驱动程序。

<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.3.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/extra-jars/ojdbc14-10.2.0.3.0.jar</systemPath>
</dependency>

然后将 jar 包含到路径/BOOT-INF/lib/* * 中

<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>

并从资源中排除以避免重复包含,罐子已经足够胖了 ~

<build>
<testSourceDirectory>src/test/java</testSourceDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>**/*.jar</exclude>
</excludes>
</resource>
</resources>
</build>

祝你好运!

向 Maven 项目添加非 Maven jar 的 Maven 方法

美芬计划和非美芬罐

在构建部分添加 maven 安装插件

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>${version.maven-install-plugin}</version>
<executions>


<execution>
<id>install-external-non-maven1-jar</id>
<phase>clean</phase>
<configuration>
<repositoryLayout>default</repositoryLayout>
<groupId>jar1.group</groupId>
<artifactId>non-maven1</artifactId>
<version>${version.non-maven1}</version>
<file>${project.basedir}/libs/non-maven1.jar</file>
<packaging>jar</packaging>
<generatePom>true</generatePom>
</configuration>
<goals>
<goal>install-file</goal>
</goals>
</execution>
<execution>
<id>install-external-non-maven2-jar</id>
<phase>clean</phase>
<configuration>
<repositoryLayout>default</repositoryLayout>
<groupId>jar2.group</groupId>
<artifactId>non-maven2</artifactId>
<version>${version.non-maven2}</version>
<file>${project.basedir}/libs/non-maven2.jar</file>
<packaging>jar</packaging>
<generatePom>true</generatePom>
</configuration>
<goals>
<goal>install-file</goal>
</goals>
</execution>
<execution>
<id>install-external-non-maven3-jar</id>
<phase>clean</phase>
<configuration>
<repositoryLayout>default</repositoryLayout>
<groupId>jar3.group</groupId>
<artifactId>non-maven3</artifactId>
<version>${version.non-maven3}</version>
<file>${project.basedir}/libs/non-maven3.jar</file>
<packaging>jar</packaging>
<generatePom>true</generatePom>
</configuration>
<goals>
<goal>install-file</goal>
</goals>
</execution>
</executions>
</plugin>

添加依赖项

<dependencies>
<dependency>
<groupId>jar1.group</groupId>
<artifactId>non-maven1</artifactId>
<version>${version.non-maven1}</version>
</dependency>
<dependency>
<groupId>jar2.group</groupId>
<artifactId>non-maven2</artifactId>
<version>${version.non-maven2}</version>
</dependency>
<dependency>
<groupId>jar3.group</groupId>
<artifactId>non-maven3</artifactId>
<version>${version.non-maven3}</version>
</dependency>
</dependencies>

注意: 我是这个博客的主人

使用 Eclipse 氧气,你可以做以下事情:

  1. 将库放在 WEB-INF/lib 中
  2. 项目-> 配置构建路径-> 添加库-> Web 应用程序库

Maven 将在安装项目时使用它们。

请注意,所有使用

<repository>...</respository>

需要外部

<repositories>...</repositories>

附加标签。从一些例子中看不清楚。

我发现处理这个问题的最有效和最干净的方法是使用 Github 软件包

  1. 根据您的需要,在 GitHub 上创建一个简单的空的公共/私有存储库,无论您是否希望将外部 jar 公开托管。

  2. 运行以下 maven 命令将外部 jar 部署到上面创建的 github 存储库中

    部署: 部署文件 - DgroupId = your-group-id - DartifactId = 你的艺术品 ID - Dversion = 1.0.0-Dpackage = jar-Dfile = path-to-file - DrepositoryId = id-to-map-on-server-section-of-setings.xml - https://maven.pkg.github.com/github-username/github-reponame-created-in-above-step

    上面的命令将在 -Durl=中提到的 GitHub 存储库中部署外部 jar。 你可以在如何部署 GitHub 软件包上参考这个链接: < a href = “ https://help. GitHub.com/en/GitHub/management-package-with-GitHub-Packages/about-GitHub-Packages”rel = “ nofollow norefrer”> GitHub 软件包部署教程

  3. 然后,您可以使用上述步骤中提到的 groupIdartifactIdversion在 maven pom.xml中添加依赖项,并运行 mvn install

  4. Maven 将从 GitHub Packages 注册中心获取外部 jar 的依赖项,并在您的 Maven 项目中提供。

  5. 为了实现这一点,您还需要配置 maven 的 settings.xml,以便从 GitHub Package 注册中心获取。