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

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

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

xqkwcwgp

xqkwcwgp1#

另一个有趣的例子是,当您希望在项目中使用私有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下的文件夹),就完成了。

0x6upsns

0x6upsns2#

请注意,使用本地回购并不一定是个好主意。如果这个项目与其他人共享,那么其他人都会有问题

ufj5ltwl

ufj5ltwl3#

出于某种原因,在我要维护的web应用程序中,alireza fattahi的解决方案和jj roman的解决方案都不能正常工作。在这两种情况下,编译都可以进行(它可以看到jar),但是打包未能将jar包含在war中。
我唯一的办法就是把jar放上去 /src/main/webapp/WEB-INF/lib/ 然后把它和fattahis或roman的解结合起来。

ckx4rj1h

ckx4rj1h4#

也看看。。。

<scope>compile</scope>

maven依赖项。这是默认值,但我发现在某些情况下显式设置该范围也可以在本地存储库中查找本地库。

2vuwiymt

2vuwiymt5#

将本地jar库、它们的源代码和javadoc添加到maven项目中

如果你预先编译过 jar 有库的文件,它们的 sources 以及 javadoc ,那么你可以 install 将它们保存到本地maven存储库中,如下所示:

mvn install:install-file
    -Dfile=awesomeapp-1.0.1.jar \
    -DpomFile=awesomeapp-1.0.1.pom \
    -Dsources=awesomeapp-1.0.1-sources.jar \
    -Djavadoc=awesomeapp-1.0.1-javadoc.jar \
    -DgroupId=com.example \
    -DartifactId=awesomeapp \
    -Dversion=1.0.1 \
    -Dpackaging=jar

然后在项目中可以使用以下库:

<!-- com.example -->
<dependency>
    <groupId>com.example</groupId>
    <artifactId>awesomeapp</artifactId>
    <version>1.0.1</version>
</dependency>

请参阅:maven install plugin用法。
或者你可以 build 这些图书馆有自己的 sources 以及 javadoc 使用maven源插件和maven javadoc插件,然后 install 他们。
示例项目:库

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
         http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <url>https://example.com/awesomeapp</url>

    <groupId>com.example</groupId>
    <artifactId>awesomeapp</artifactId>
    <name>awesomeapp</name>
    <version>1.0.1</version>
    <packaging>jar</packaging>

    <properties>
        <java.version>12</java.version>
    </properties>

    <build>
        <finalName>awesomeapp</finalName>
        <defaultGoal>install</defaultGoal>

        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <inherited>true</inherited>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>3.2.1</version>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <goals><goal>jar</goal></goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <inherited>true</inherited>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>3.2.0</version>
                <executions>
                    <execution>
                        <id>attach-javadocs</id>
                        <goals><goal>jar</goal></goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

执行maven install 目标:

mvn install

检查本地maven存储库:

~/.m2/repository/com/example/awesomeapp/1.0.1/
 ├─ _remote.repositories
 ├─ awesomeapp-1.0.1.jar
 ├─ awesomeapp-1.0.1.pom
 ├─ awesomeapp-1.0.1-javadoc.jar
 └─ awesomeapp-1.0.1-sources.jar

然后您可以使用此库:

<!-- com.example -->
<dependency>
    <groupId>com.example</groupId>
    <artifactId>awesomeapp</artifactId>
    <version>1.0.1</version>
</dependency>
n3ipq98p

n3ipq98p6#

我想分享一个代码,你可以上传一个装满jar的文件夹。当提供者没有公共存储库并且您需要手动添加大量库时,它非常有用。我决定构建一个.bat而不是直接调用maven,因为它可能是内存不足错误。它是为windows环境准备的,但很容易适应linux操作系统:

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.util.jar.Attributes;
import java.util.jar.JarFile;
import java.util.jar.Manifest;

public class CreateMavenRepoApp {

    private static final String OCB_PLUGIN_FOLDER = "C://your_folder_with_jars";

    public static void main(String[] args) throws IOException {

    File directory = new File();
    //get all the files from a directory
    PrintWriter writer = new PrintWriter("update_repo_maven.bat", "UTF-8");
    writer.println("rem "+ new Date());  
    File[] fList = directory.listFiles();
    for (File file : fList){
        if (file.isFile()){               
        String absolutePath = file.getAbsolutePath() ;
        Manifest  m = new JarFile(absolutePath).getManifest();
        Attributes attributes = m.getMainAttributes();
        String symbolicName = attributes.getValue("Bundle-SymbolicName");

        if(symbolicName!=null &&symbolicName.contains("com.yourCompany.yourProject")) {
            String[] parts =symbolicName.split("\\.");
            String artifactId = parts[parts.length-1];
            String groupId = symbolicName.substring(0,symbolicName.length()-artifactId.length()-1);
            String version = attributes.getValue("Bundle-Version");
            String mavenLine= "call mvn org.apache.maven.plugins:maven-install-plugin:2.5.1:install-file -Dfile="+ absolutePath+" -DgroupId="+ groupId+" -DartifactId="+ artifactId+" -Dversion="+ version+" -Dpackaging=jar ";
            writer.println(mavenLine);          
        }

        }
    }
    writer.close();
    }

}

从任何ide运行这个main之后,运行update\u repo\u maven.bat。

fjnneemd

fjnneemd7#

首选的方法是创建自己的远程存储库。
有关如何操作的详细信息,请参见此处。请看一下“上载到远程存储库”部分。

pftdvrlh

pftdvrlh8#

我认为解决这个问题更好的方法是使用maven安装插件在安装时自动安装文件。我就是这样为我的项目设置的。
首先,将路径(存储local.jars的位置)添加为属性。

<properties>
    <local.sdk>/path/to/jar</local.sdk>
</properties>

然后,在 plugins 在编译时添加一个插件来安装jar。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-install-plugin</artifactId>
    <version>2.5.2</version>
    <executions>
        <execution>
            <id>1</id>
            <phase>initialize</phase>
            <goals>
                <goal>install-file</goal>
            </goals>
            <configuration>
                <groupId>com.local.jar</groupId> 
                <artifactId>appengine-api</artifactId>
                <version>1.0</version>
                <packaging>jar</packaging>
                <file>${local.sdk}/lib/impl/appengine-api.jar</file>
            </configuration>
        </execution>
        <execution>
            <id>appengine-api-stubs</id>
            <phase>initialize</phase>
            <goals>
                <goal>install-file</goal>
            </goals>
            <configuration>
                <groupId>com.local.jar</groupId>
                <artifactId>appengine-api-stubs</artifactId>
                <version>1.0</version>
                <packaging>jar</packaging>
                <file>${local.sdk}/lib/impl/appengine-api-stubs.jar</file>
            </configuration>
        </execution>
    </executions>
</plugin>

最后,在依赖项中,可以添加jar

<dependency>
    <groupId>com.local.jar</groupId>
    <artifactId>appengine-api</artifactId>
    <version>1.0</version>
</dependency>

<dependency>
    <groupId>com.local.jar</groupId>
    <artifactId>appengine-api-stubs</artifactId>
    <version>1.0</version>
    <scope>test</scope>
</dependency>

通过这样设置您的项目,即使您将项目带到另一台计算机上(假定它在属性指定的路径中拥有所有jar文件),项目仍将继续构建 local.sdk ).
为了 groupId 使用唯一的名称只是为了确保没有冲突。
现在当你 mvn install 或者 mvn test 本地jar将自动添加。

ffdz8vbo

ffdz8vbo9#

这是新版本的简短语法:

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

cxfofazt

cxfofazt10#

步骤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` 和往常一样:
cotxawn7

cotxawn711#

命令行:

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

6yoyoihd12#

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

djmepvbi

djmepvbi13#

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

xqkwcwgp

xqkwcwgp14#

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

2wnc66cl

2wnc66cl15#

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

相关问题