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

这是我第一次学习Maven的几天,而且我还在为基础而苦苦挣扎。 我有一个外部.jar文件(在公共仓库中不可用),我需要在我的项目中引用,我试图找出我最好的select是什么。

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

1)我最好的select是使用maven添加.jar文件到我的项目引用中,因为我希望项目和库都在源代码控制中。

2)我似乎还没有看到Eclipse的依赖。 我手动将其添加到POM的部分,它显示在m2eclipse的依赖项列表中显示良好。 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文件了吗?

谢谢!

我想你应该使用mvn install:install-file来使用库jar来填充你的本地仓库,然后你应该把这个范围从系统改变到编译。

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

至于错误,你把所需的瓶子放在你的类path上吗? 如果使用库中的types,则还需要在运行时访问它。 这与maven本身无关。

我不明白你为什么要把图书馆的源代码控制 – 它是源代码而不是二进制jar。

您可以创build一个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

详细阅读这篇博文

http://charlie.cu.cc/2012/06/how-add-external-libraries-maven/

Maven手册说要这样做 :

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

更新我们已经安装了我们自己的Nexus服务器,更容易,更清洁。

在我们公司,我们有一些jar子,我们有些jar子是常见的,但没有托pipe在任何maven仓库中,我们也不想把它们存放在本地。 我们在Github上创build了一个非常简单的mvn(公共)回购协议(但是您可以在任何服务器或本地托pipe它):
请注意 ,这仅适用于pipe理less数chaning jar文件

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

  2. 在pom.xml中添加存储库
    (请注意,完整path原始文件与回购名称有点不同)

     <repository> <id>project-common</id> <name>Project Common</name> <url>https://github.com/<user_name>/mvn-repo/raw/master/</url> </repository> 
  3. 添加依赖主机(Github或私人服务器)
    一个。 所有你需要知道的是文件存储在@ glitch提到的模式
    /groupId/artifactId/version/artifactId-version.jar
    在您的主机上创build文件夹以匹配此模式。
    即如果您有一个名为service-sdk-0.0.1.jar的jar文件,请创build文件夹service-sdk/service-sdk/0.0.1/并将jar文件service-sdk-0.0.1.jar放入其中。
    C。 通过尝试从浏览器下载jar来testing它(在我们的例子中: https://github.com/<user_name>/mvn-repo/raw/master/service-sdk/service-sdk/0.0.1/service-sdk-0.0.1.jarhttps://github.com/<user_name>/mvn-repo/raw/master/service-sdk/service-sdk/0.0.1/service-sdk-0.0.1.jar

  4. 添加依赖到您的pom.xml文件:

     <dependency> <groupId>service-sdk</groupId> <artifactId>service-sdk</artifactId> <version>0.0.1</version> </dependency> 
  5. 请享用

这可以通过使用嵌套在<dependency>元素中的<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

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

  1. 在-DlocalRepositoryPath中使用“mvn install:install-file”。
  2. configuration存储库以指向您的POM中的path。

这是相当简单的,你可以在这里find一个循序渐进的例子: http : //randomizedsort.blogspot.com/2011/10/configuring-maven-to-use-local-library.html

pom.xml将查看您的本地存储库以尝试find与您的工件匹配的依赖关系。 另外,您不应该真正使用系统范围或systemPath属性,这些属性通常是保留给JDK中的,而不是JRE中的

看到这个问题如何安装maven工件。

这里最好的解决scheme是安装一个仓库:Nexus或Artifactory。 如果给你一个放置这样的东西的地方,并且进一步通过从外部caching你的东西来加快速度。

如果你正在处理的事情是开源的,你也可以考虑它放在中央。

看指南 。

改变你的系统path

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

如果遇到同样的问题,并且使用了spring-boot v1.4 + ,那么可以这样做。

有一个includeSystemScope ,您可以使用它将系统范围的依赖项添加到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> 

然后使includeSystemScope = true将jar包含到path/ BOOT-INF / lib / **

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

并从资源中排除,避免重复包含,这个jar很胖〜

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

祝你好运!

Maven的方式添加非mavenjar子到maven项目

Maven项目和非Mavenjar子

在你的build部分中添加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> 

参考资料注意我是博客的所有者

如果外部jar是由Maven项目创build的,那么你可以复制整个项目在你的系统上运行一个

 mvn install 

在项目目录中。 这将把jar添加到本地maven仓库的.m2目录中。

现在你可以添加

 <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 

作品。 如果你在这里使用build议

 <scope>system</scope> 

然后,您将不得不单独添加类,而通过命令行执行。

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

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

使用Eclipse Oxygen,您可以执行以下操作:

  1. 将您的库放在WEB-INF / lib中
  2. 项目 – >configuration生成path – >添加库 – > Web应用程序库

Maven在安装这个项目时会带上它们。