如何在 maven jar 构建过程中包含外部 jar?

Posted

技术标签:

【中文标题】如何在 maven jar 构建过程中包含外部 jar?【英文标题】:How to include external jars in maven jar build process? 【发布时间】:2012-09-12 08:50:20 【问题描述】:

我想在 maven 中构建一个带有依赖项的 .jar 文件。不幸的是,我必须在构建路径中包含一些外部 .jar。当我现在尝试使用 maven 包构建这个项目时,我会收到一个错误,即找不到那些外部 .jar。

如何调整我的 pom 文件以添加这些 jar? 当前:

    <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>$project.build.directory/classes/lib</outputDirectory>
                            <overWriteReleases>false</overWriteReleases>
                            <overWriteSnapshots>false</overWriteSnapshots>
                            <overWriteIfNewer>true</overWriteIfNewer>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.2-beta-4</version>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
    </plugins>

【问题讨论】:

【参考方案1】:

您可以使用&lt;scope&gt;system&lt;/scope&gt; 在构建路径中包含外部jar 作为依赖项 .

查看link

【讨论】:

它看起来不错,但如果它不是 JDK 的一部分,如示例所引用的那样。例如,如果您想引用与 pom 位于同一目录中的 JAR 怎么办? (在项目文件夹中) 好吧,但是那个 dep 不会和你的 jar/war 一起打包。 根据 Maven 官方页面,现在已弃用。【参考方案2】:

您需要使用以下命令将外部 jar 添加到 .m2 文件夹中

mvn install:install-file -Dfile=[JAR] -DgroupId=[some.group] -DartifactId=[Some Id] -Dversion=1.0.0 -Dpackaging=jar

这会将给定的 jar 添加到您的 .m2 文件夹中。之后转到 pom.xm 并添加具有给定组 ID、工件 ID 和版本的依赖项。

【讨论】:

在 Windows 中,我必须用双引号将所有参数值括起来【参考方案3】:

一个简单的解决方案是将其添加到本地 maven 存储库中

一种方法是按照上一篇文章中的建议通过 mvn install 命令。

另一个简单的方法是,

    在您的 Eclipse IDE 中右键单击项目选择 Maven 选项。 选择安装或将工件部署到 Maven 存储库选项,然后单击下一步。 点击工件文件复选框旁边的浏览并选择您的 jar 文件。 输入 GroupId 和 ArtifactId 和版本,确保检查生成 pom 和创建校验和并打包为 jar

点击完成,哇!!!!您的工作已完成,jar 已添加到您可以在 setting.xml 或 m2 目录中定义的本地存储库中。

现在只需根据您根据导入输入的 GroupId、ArtifactId 和 jar 版本添加简单的 maven 依赖项,这样您的外部 jar 将由 maven 打包。

【讨论】:

以上是关于如何在 maven jar 构建过程中包含外部 jar?的主要内容,如果未能解决你的问题,请参考以下文章

xml 使用Maven构建在JAR中包含JAVA源

如何在使用 maven 构建的战争中包含系统依赖项

Maven - 在 jar 中包含依赖库而不解包依赖项?

如何在 Maven 项目中包含本地 jar 文件 [重复]

如何在 Maven 生成的 jar 中包含特定文件夹?

为啥 maven 不在我的 jar 中包含 JSP 文件?