如何将本地jar文件(还不是maven存储库的一部分)直接添加到项目的库源中?
6yoyoihd1#
将jar安装到本地maven存储库中,如下所示:
mvn install:install-file \ -Dfile=<path-to-file> \ -DgroupId=<group-id> \ -DartifactId=<artifact-id> \ -Dversion=<version> \ -Dpackaging=<packaging> \ -DgeneratePom=true
其中每一个都是指: <path-to-file> :要加载的文件的路径,例如→c:\kaptcha-2.3.jar <group-id> :文件应在其下注册的组,例如→com.google.code <artifact-id> :文件的工件名称,例如→kaptcha <version> :文件的版本,例如→2.3 <packaging> :文件的打包,例如。→ jar 参考maven常见问题解答:我有一个jar,我想把它放到本地存储库中。我怎样才能把它抄进来?maven安装插件用法 install:install-file 目标
<path-to-file>
<group-id>
<artifact-id>
<version>
<packaging>
jar
install:install-file
t98cgbkg2#
您可以直接添加本地依赖项(如build maven project中所述,包括适当的库),如下所示:
<dependency> <groupId>com.sample</groupId> <artifactId>sample</artifactId> <version>1.0</version> <scope>system</scope> <systemPath>${project.basedir}/src/main/resources/Name_Your_JAR.jar</systemPath> </dependency>
更新在新版本中,这个特性被标记为已弃用,但仍在工作,尚未被删除(您只需在maven启动期间在日志中看到警告)。maven group对此提出了一个问题https://issues.apache.org/jira/browse/mng-6523 (您可以参与并描述为什么此功能在某些情况下有用)。我希望这个功能仍然存在!如果你问我,只要这个特性没有被删除,我就用它来依赖我的项目中一个不适合存储库的调皮jar文件。如果这个功能被删除,那么,这里有很多好的答案,我可以选择从稍后!
c2e8gylq3#
首先,我想把这个答案归功于一个匿名堆栈溢出用户——我很肯定我以前在这里看到过类似的答案——但现在我找不到了。将本地jar文件作为依赖项的最佳选择是创建本地maven存储库。这样的存储库只不过是一个包含pom文件的适当目录结构。举个例子:我的主项目 ${master_project} 位置和子项目1已打开 ${master_project}/${subproject1} .然后在以下位置创建maven存储库: ${master_project}/local-maven-repo .在子项目1的pom文件中,位于 ${master_project}/${subproject1}/pom.xml ,需要指定将文件路径作为url参数的存储库:
${master_project}
${master_project}/${subproject1}
${master_project}/local-maven-repo
${master_project}/${subproject1}/pom.xml
<repositories> <repository> <id>local-maven-repo</id> <url>file:///${project.parent.basedir}/local-maven-repo</url> </repository> </repositories>
可以将依赖项指定为任何其他存储库的依赖项。这使得pom存储库独立。例如,一旦所需的jar在maven central中可用,您只需从本地repo中删除它,它就会从默认repo中提取出来。
<dependency> <groupId>org.apache.felix</groupId> <artifactId>org.apache.felix.servicebinder</artifactId> <version>0.9.0-SNAPSHOT</version> </dependency>
最后但并非最不重要的事情是使用-dlocalrepositorypath开关将jar文件添加到本地存储库,如下所示:
mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file \ -Dfile=/some/path/on/my/local/filesystem/felix/servicebinder/target/org.apache.felix.servicebinder-0.9.0-SNAPSHOT.jar \ -DgroupId=org.apache.felix -DartifactId=org.apache.felix.servicebinder \ -Dversion=0.9.0-SNAPSHOT -Dpackaging=jar \ -DlocalRepositoryPath=${master_project}/local-maven-repo
一旦安装了jar文件,您的maven repo就可以提交到一个代码存储库,整个设置是独立于系统的(github中的工作示例)。我同意让jar致力于源代码repo并不是一个好的实践,但在现实生活中,快速而肮脏的解决方案有时比一个完整的nexus repo更好,因为它承载了一个您无法发布的jar。
vohkndzv4#
比如说,创建一个新文件夹 local-maven-repo 在maven项目的基础上。只需在您的账户中添加本地回购即可 <project> 你的 pom.xml :
local-maven-repo
<project>
pom.xml
<repositories> <repository> <id>local-maven-repo</id> <url>file:///${project.basedir}/local-maven-repo</url> </repository> </repositories>
然后,对于要安装的每个外部jar,转到项目的根目录并执行:
mvn deploy:deploy-file -DgroupId=[GROUP] -DartifactId=[ARTIFACT] -Dversion=[VERS] -Durl=file:./local-maven-repo/ -DrepositoryId=local-maven-repo -DupdateReleaseInfo=true -Dfile=[FILE_PATH]
bttbmeg05#
我想要这样的解决方案-使用 maven-install-plugin 在pom文件中:
maven-install-plugin
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-install-plugin</artifactId> <version>2.5.2</version> <executions> <execution> <phase>initialize</phase> <goals> <goal>install-file</goal> </goals> <configuration> <file>lib/yourJar.jar</file> <groupId>com.somegroup.id</groupId> <artifactId>artefact-id</artifactId> <version>x.y.z</version> <packaging>jar</packaging> </configuration> </execution> </executions> </plugin>
在这种情况下,您可以执行 mvn initialize jar将安装在本地maven repo中。现在,这个jar在这台机器上的任何maven步骤中都是可用的(不要忘记在pom中包含这个依赖项,就像其他maven依赖项一样) <dependency></dependency> 标签)。也可以将jar install绑定到not initialize 一步,但任何你喜欢的步骤。
mvn initialize
<dependency></dependency>
initialize
y4ekin9u6#
<dependency> <groupId>group id name</groupId> <artifactId>artifact name</artifactId> <version>version number</version> <scope>system</scope> <systemPath>jar location</systemPath> </dependency>
ifmq2ha27#
真正快速而肮脏的方法是指向本地文件:
<dependency> <groupId>sample</groupId> <artifactId>com.sample</artifactId> <version>1.0</version> <scope>system</scope> <systemPath>C:\DEV\myfunnylib\yourJar.jar</systemPath> </dependency>
但是,这只会存在于您的计算机上(显然),对于共享,使用适当的m2存档(nexus/artifactory)通常是有意义的,或者如果您没有这些存档或不想设置本地maven结构化存档并在pom中配置“存储库”:本地:
<repositories> <repository> <id>my-local-repo</id> <url>file://C:/DEV//mymvnrepo</url> </repository> </repositories>
远程:
<repositories> <repository> <id>my-remote-repo</id> <url>http://192.168.0.1/whatever/mavenserver/youwant/repo</url> </repository> </repositories>
为此,还可以使用basedir变量创建相对路径:
<url>file:${basedir}</url>
cidc1ykv8#
依赖关系中的重要部分是:${pom.basedir}(而不仅仅是${basedir})
<dependency> <groupId>org.example</groupId> <artifactId>example</artifactId> <version>1.0</version> <scope>system</scope> <systemPath>${pom.basedir}/src/lib/example.jar</systemPath> </dependency>
2wnc66cl9#
在pom文件中添加您自己的本地jar,并在maven构建中使用它。
mvn install:install-file -Dfile=path-to-jar -DgroupId=owngroupid -DartifactId=ownartifactid -Dversion=ownversion -Dpackaging=jar
例如:
mvn install:install-file -Dfile=path-to-jar -DgroupId=com.decompiler -DartifactId=jd-core-java -Dversion=1.2 -Dpackaging=jar
然后将其添加到pom中,如下所示:
xqkwcwgp10#
一种方法是将其上传到您自己的maven存储库管理器(比如nexus)。不管怎样,拥有一个自己的存储库管理器是一个很好的做法。我最近看到的另一个好方法是在构建生命周期中包含maven安装插件:在pom中声明将文件安装到本地存储库。这是一个小,但小开销和没有手动步骤涉及。http://maven.apache.org/plugins/maven-install-plugin/install-file-mojo.html
djmepvbi11#
当然,您可以将jar添加到该文件夹中。但也许这并不是你想要的。。。如果您需要这些jar进行编译,请检查以下相关问题:我可以在不安装jar的情况下将其添加到maven 2 build classpath吗?另外,在任何人提出建议之前,不要使用系统作用域。
xqkwcwgp12#
另一个有趣的例子是,当您希望在项目中使用私有maven jar时。您可能希望保留maven解析可传递依赖项的功能。解决方法相当简单。在项目中创建文件夹libs在pom.xml文件中添加以下行
<properties><local.repository.folder>${pom.basedir}/libs/</local.repository.folder> </properties> <repositories> <repository> <id>local-maven-repository</id> <url>file://${local.repository.folder}</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories>
打开.m2/repository文件夹,将要导入的项目的目录结构复制到libs文件夹中。e、 g.假设要导入依赖项
<dependency> <groupId>com.mycompany.myproject</groupId> <artifactId>myproject</artifactId> <version>1.2.3</version> </dependency>
继续.m2/repository,您将看到以下文件夹com/mycompany/myproject/1.2.3复制libs文件夹中的所有内容(同样,包括.m2/repository下的文件夹),就完成了。
cotxawn713#
命令行:
mvn install:install-file -Dfile=c:\kaptcha-{version}.jar -DgroupId=com.google.code -DartifactId=kaptcha -Dversion={version} -Dpackaging=jar
cxfofazt14#
步骤1:配置 maven-install-plugin 带着目标 install-file 在你的 pom.xml ```org.apache.maven.pluginsmaven-install-plugininstall-external-non-maven-jar-MWS-Client-into-local-maven-repocleandefaultcom.amazonservices.mwsmws-client1.0${project.basedir}/lib/MWSClientJavaRuntime-1.0.jarjartrueinstall-file
install-file
确保编辑 `file` 基于实际文件路径的路径(建议将这些外部非maven jar放在某个文件夹中,例如 `lib` ,然后把这个 `lib` 文件夹,以便使用特定于项目的相对路径,避免添加特定于系统的绝对路径。 如果您有多个外部jar,只需重复 `<execution>` 对于同一容器内的其他jar `maven-install-plugin` . 步骤2:一旦您配置了 `maven-install-plugin` 如上图所示 `pom.xml` 文件,你必须用这些jar `pom.xml` 和往常一样:
ffdz8vbo15#
这是新版本的简短语法:
mvn install:install-file -Dfile=<path-to-file>
当jar由apachemaven构建时,它就可以工作了——这是最常见的情况。然后它将在meta inf目录的子文件夹中包含pom.xml,默认情况下将读取该子文件夹。资料来源:http://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html
22条答案
按热度按时间6yoyoihd1#
将jar安装到本地maven存储库中,如下所示:
其中每一个都是指:
<path-to-file>
:要加载的文件的路径,例如→c:\kaptcha-2.3.jar
<group-id>
:文件应在其下注册的组,例如→com.google.code
<artifact-id>
:文件的工件名称,例如→kaptcha
<version>
:文件的版本,例如→2.3
<packaging>
:文件的打包,例如。→jar
参考maven常见问题解答:我有一个jar,我想把它放到本地存储库中。我怎样才能把它抄进来?
maven安装插件用法
install:install-file
目标t98cgbkg2#
您可以直接添加本地依赖项(如build maven project中所述,包括适当的库),如下所示:
更新
在新版本中,这个特性被标记为已弃用,但仍在工作,尚未被删除(您只需在maven启动期间在日志中看到警告)。maven group对此提出了一个问题https://issues.apache.org/jira/browse/mng-6523 (您可以参与并描述为什么此功能在某些情况下有用)。我希望这个功能仍然存在!
如果你问我,只要这个特性没有被删除,我就用它来依赖我的项目中一个不适合存储库的调皮jar文件。如果这个功能被删除,那么,这里有很多好的答案,我可以选择从稍后!
c2e8gylq3#
首先,我想把这个答案归功于一个匿名堆栈溢出用户——我很肯定我以前在这里看到过类似的答案——但现在我找不到了。
将本地jar文件作为依赖项的最佳选择是创建本地maven存储库。这样的存储库只不过是一个包含pom文件的适当目录结构。
举个例子:我的主项目
${master_project}
位置和子项目1已打开${master_project}/${subproject1}
.然后在以下位置创建maven存储库:
${master_project}/local-maven-repo
.在子项目1的pom文件中,位于
${master_project}/${subproject1}/pom.xml
,需要指定将文件路径作为url参数的存储库:可以将依赖项指定为任何其他存储库的依赖项。这使得pom存储库独立。例如,一旦所需的jar在maven central中可用,您只需从本地repo中删除它,它就会从默认repo中提取出来。
最后但并非最不重要的事情是使用-dlocalrepositorypath开关将jar文件添加到本地存储库,如下所示:
一旦安装了jar文件,您的maven repo就可以提交到一个代码存储库,整个设置是独立于系统的(github中的工作示例)。
我同意让jar致力于源代码repo并不是一个好的实践,但在现实生活中,快速而肮脏的解决方案有时比一个完整的nexus repo更好,因为它承载了一个您无法发布的jar。
vohkndzv4#
比如说,创建一个新文件夹
local-maven-repo
在maven项目的基础上。只需在您的账户中添加本地回购即可
<project>
你的pom.xml
:然后,对于要安装的每个外部jar,转到项目的根目录并执行:
bttbmeg05#
我想要这样的解决方案-使用
maven-install-plugin
在pom文件中:在这种情况下,您可以执行
mvn initialize
jar将安装在本地maven repo中。现在,这个jar在这台机器上的任何maven步骤中都是可用的(不要忘记在pom中包含这个依赖项,就像其他maven依赖项一样)<dependency></dependency>
标签)。也可以将jar install绑定到notinitialize
一步,但任何你喜欢的步骤。y4ekin9u6#
ifmq2ha27#
真正快速而肮脏的方法是指向本地文件:
但是,这只会存在于您的计算机上(显然),对于共享,使用适当的m2存档(nexus/artifactory)通常是有意义的,或者如果您没有这些存档或不想设置本地maven结构化存档并在pom中配置“存储库”:
本地:
远程:
为此,还可以使用basedir变量创建相对路径:
cidc1ykv8#
依赖关系中的重要部分是:${pom.basedir}(而不仅仅是${basedir})
2wnc66cl9#
在pom文件中添加您自己的本地jar,并在maven构建中使用它。
例如:
然后将其添加到pom中,如下所示:
xqkwcwgp10#
一种方法是将其上传到您自己的maven存储库管理器(比如nexus)。不管怎样,拥有一个自己的存储库管理器是一个很好的做法。
我最近看到的另一个好方法是在构建生命周期中包含maven安装插件:在pom中声明将文件安装到本地存储库。这是一个小,但小开销和没有手动步骤涉及。
http://maven.apache.org/plugins/maven-install-plugin/install-file-mojo.html
djmepvbi11#
当然,您可以将jar添加到该文件夹中。但也许这并不是你想要的。。。
如果您需要这些jar进行编译,请检查以下相关问题:我可以在不安装jar的情况下将其添加到maven 2 build classpath吗?
另外,在任何人提出建议之前,不要使用系统作用域。
xqkwcwgp12#
另一个有趣的例子是,当您希望在项目中使用私有maven jar时。您可能希望保留maven解析可传递依赖项的功能。解决方法相当简单。
在项目中创建文件夹libs
在pom.xml文件中添加以下行
打开.m2/repository文件夹,将要导入的项目的目录结构复制到libs文件夹中。
e、 g.假设要导入依赖项
继续.m2/repository,您将看到以下文件夹
com/mycompany/myproject/1.2.3
复制libs文件夹中的所有内容(同样,包括.m2/repository下的文件夹),就完成了。
cotxawn713#
命令行:
cxfofazt14#
步骤1:配置
maven-install-plugin
带着目标install-file
在你的pom.xml
```org.apache.maven.plugins
maven-install-plugin
install-external-non-maven-jar-MWS-Client-into-local-maven-repo
clean
default
com.amazonservices.mws
mws-client
1.0
${project.basedir}/lib/MWSClientJavaRuntime-1.0.jar
jar
true
install-file
ffdz8vbo15#
这是新版本的简短语法:
当jar由apachemaven构建时,它就可以工作了——这是最常见的情况。然后它将在meta inf目录的子文件夹中包含pom.xml,默认情况下将读取该子文件夹。
资料来源:http://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html