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文件
-
在GitHub上创build回购:
https://github.com/<user_name>/mvn-repo/
-
在pom.xml中添加存储库
(请注意,完整path原始文件与回购名称有点不同)<repository> <id>project-common</id> <name>Project Common</name> <url>https://github.com/<user_name>/mvn-repo/raw/master/</url> </repository>
-
添加依赖主机(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.jar
:https://github.com/<user_name>/mvn-repo/raw/master/service-sdk/service-sdk/0.0.1/service-sdk-0.0.1.jar
-
添加依赖到您的pom.xml文件:
<dependency> <groupId>service-sdk</groupId> <artifactId>service-sdk</artifactId> <version>0.0.1</version> </dependency>
-
请享用
这可以通过使用嵌套在<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它。 这是两个关键的步骤:
- 在-DlocalRepositoryPath中使用“mvn install:install-file”。
- 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,您可以执行以下操作:
- 将您的库放在WEB-INF / lib中
- 项目 – >configuration生成path – >添加库 – > Web应用程序库
Maven在安装这个项目时会带上它们。