如何将本地jar文件添加到maven项目中?

zbsbpyhn  于 2021-07-15  发布在  Hadoop
关注(0)|答案(22)|浏览(558)

如何将本地jar文件(还不是maven存储库的一部分)直接添加到项目的库源中?

6yoyoihd

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 目标

t98cgbkg

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文件。如果这个功能被删除,那么,这里有很多好的答案,我可以选择从稍后!

c2e8gylq

c2e8gylq3#

首先,我想把这个答案归功于一个匿名堆栈溢出用户——我很肯定我以前在这里看到过类似的答案——但现在我找不到了。
将本地jar文件作为依赖项的最佳选择是创建本地maven存储库。这样的存储库只不过是一个包含pom文件的适当目录结构。
举个例子:我的主项目 ${master_project} 位置和子项目1已打开 ${master_project}/${subproject1} .
然后在以下位置创建maven存储库: ${master_project}/local-maven-repo .
在子项目1的pom文件中,位于 ${master_project}/${subproject1}/pom.xml ,需要指定将文件路径作为url参数的存储库:

<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。

vohkndzv

vohkndzv4#

比如说,创建一个新文件夹 local-maven-repo 在maven项目的基础上。
只需在您的账户中添加本地回购即可 <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]
bttbmeg0

bttbmeg05#

我想要这样的解决方案-使用 maven-install-plugin 在pom文件中:

<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 一步,但任何你喜欢的步骤。

y4ekin9u

y4ekin9u6#

<dependency>
    <groupId>group id name</groupId>
    <artifactId>artifact name</artifactId>
    <version>version number</version>
    <scope>system</scope>
    <systemPath>jar location</systemPath>
</dependency>
ifmq2ha2

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>
cidc1ykv

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>
2wnc66cl

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中,如下所示:

xqkwcwgp

xqkwcwgp10#

一种方法是将其上传到您自己的maven存储库管理器(比如nexus)。不管怎样,拥有一个自己的存储库管理器是一个很好的做法。
我最近看到的另一个好方法是在构建生命周期中包含maven安装插件:在pom中声明将文件安装到本地存储库。这是一个小,但小开销和没有手动步骤涉及。
http://maven.apache.org/plugins/maven-install-plugin/install-file-mojo.html

djmepvbi

djmepvbi11#

当然,您可以将jar添加到该文件夹中。但也许这并不是你想要的。。。
如果您需要这些jar进行编译,请检查以下相关问题:我可以在不安装jar的情况下将其添加到maven 2 build classpath吗?
另外,在任何人提出建议之前,不要使用系统作用域。

xqkwcwgp

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下的文件夹),就完成了。

cotxawn7

cotxawn713#

命令行:

mvn install:install-file -Dfile=c:\kaptcha-{version}.jar -DgroupId=com.google.code
-DartifactId=kaptcha -Dversion={version} -Dpackaging=jar
cxfofazt

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



确保编辑 `file` 基于实际文件路径的路径(建议将这些外部非maven jar放在某个文件夹中,例如 `lib` ,然后把这个 `lib` 文件夹,以便使用特定于项目的相对路径,避免添加特定于系统的绝对路径。
如果您有多个外部jar,只需重复 `<execution>` 对于同一容器内的其他jar `maven-install-plugin` .
步骤2:一旦您配置了 `maven-install-plugin` 如上图所示 `pom.xml` 文件,你必须用这些jar `pom.xml` 和往常一样:
ffdz8vbo

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

相关问题