在项目的src同级目录下创建lib文件夹,将jar放到这个文件夹下
在pom文件上声明:
<dependency>
<groupId>Zero</groupId>
<artifactId>xyz.haijin.zero</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/Zero.jar</systemPath>
</dependency>
可以参考:
https://gitee.com/liu-haijin/haijin-weblog-images 这个项目
在将文件上传到 Nexus 私服时,Extension 字段通常是指文件的扩展名(例如 jar、pom 等)。对于大多数 Maven 工件(如 JAR 文件),Extension 默认是 jar,不需要额外填写。
Maven 依赖配置中使用了 <scope>system</scope> 和 <systemPath> 来引用本地的 JAR 文件(zero.jar)。这种方式在开发时可能可以正常工作,但在打包项目时,Maven 不会将 system 作用域的依赖包含到最终的构建输出中(如 JAR 或 WAR 文件)。这就是为什么你在打包后的项目中找不到 zero.jar 的原因。
问题原因
-
system作用域的限制:-
system作用域的依赖是直接从本地文件系统加载的,Maven 不会将其打包到构建输出中。 -
这种方式通常不推荐使用,因为它破坏了 Maven 的依赖管理机制,且不利于项目的可移植性。
-
解决方法
方法 1:将 JAR 安装到本地 Maven 仓库
你可以将 zero.jar 安装到本地 Maven 仓库中,然后在项目中以标准的方式引用它。
-
安装 JAR 到本地仓库:
在命令行中运行以下命令:mvn install:install-file -Dfile=src/main/resources/lib/zero.jar -DgroupId=zero -DartifactId=xyz.haijin.zero -Dversion=1.0 -Dpackaging=jar
这会将
zero.jar安装到本地 Maven 仓库中。 -
修改依赖配置:
-
在你的
pom.xml中,将依赖改为:<dependency> <groupId>Zero</groupId> <artifactId>xyz.haijin.zero</artifactId> <version>1.0</version> </dependency>
这样 Maven 会从本地仓库加载该依赖,并将其包含在构建输出中。
方法 2:将 JAR 放入项目的 lib 目录并修改打包配置
如果你不想将 JAR 安装到本地仓库,可以将 JAR 文件放在项目的 lib 目录中,并修改 Maven 的打包配置。
-
将 JAR 文件放入
lib目录:
将zero.jar放到项目的lib目录中(例如:src/main/resources/lib/zero.jar)。 -
修改
pom.xml配置:
在pom.xml中添加以下插件配置,确保 JAR 文件被打包到最终的构建输出中:<build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>lib/Zero.jar</include> </includes> </resource> </resources> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.3.0</version> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/lib</outputDirectory> <includeScope>system</includeScope> </configuration> </execution> </executions> </plugin> </plugins> </build>
-
修改依赖配置:
保留原来的依赖配置:<dependency> <groupId>Zero</groupId> <artifactId>xyz.haijin.zero</artifactId> <version>1.0</version> <scope>system</scope> <systemPath>${project.basedir}/src/main/resources/lib/Zero.jar</systemPath> </dependency>
-
确保 JAR 文件被打包:
在打包时,Maven 会将zero.jar复制到构建输出的lib目录中。
方法 3:使用 Maven 的 install 和 deploy 插件
如果你需要将项目部署到远程仓库,可以使用 Maven 的 install 和 deploy 插件。
-
安装 JAR 到本地仓库:
与方法 1 相同,使用mvn install:install-file将 JAR 安装到本地仓库。 -
部署到远程仓库:
如果你有远程 Maven 仓库(如 Nexus 或 Artifactory),可以使用以下命令将 JAR 部署到远程仓库:mvn deploy:deploy-file -Dfile=src/main/resources/lib/zero.jar -DgroupId=zero -DartifactId=xyz.haijin.zero -Dversion=1.0 -Dpackaging=jar -DrepositoryId=your-repo-id -Durl=http://your-repo-url
-
修改依赖配置:
在pom.xml中使用标准的依赖配置:<dependency> <groupId>zero</groupId> <artifactId>xyz.haijin.zero</artifactId> <version>1.0</version> </dependency>
推荐方法
-
如果你只是本地开发,推荐使用 方法 1,将 JAR 安装到本地 Maven 仓库。
-
如果你需要将项目分发给其他人或部署到服务器,推荐使用 方法 3,将 JAR 部署到远程仓库。
-
如果你不想修改 Maven 仓库,可以使用 方法 2,但需要注意手动管理 JAR 文件。
总结
-
system作用域的依赖不会被 Maven 打包到构建输出中。 -
通过将 JAR 安装到本地或远程仓库,可以解决这个问题。
在 Maven 的 pom.xml 文件中添加私服(私有 Maven 仓库)配置,可以让你从私服下载依赖或将构建的工件(如 JAR 文件)上传到私服。以下是详细的配置步骤:
1. 添加私服仓库配置
在 pom.xml 中添加 <repositories> 和 <distributionManagement> 配置。
示例配置
<project> <!-- 其他配置 --> <!-- 配置私服作为仓库 --> <repositories> <repository> <id>your-repo-id</id> <!-- 仓库的唯一标识 --> <url>http://your-repo-url/repository/maven-public/</url> <!-- 私服的 URL --> <releases> <enabled>true</enabled> <!-- 允许下载 releases 版本的依赖 --> </releases> <snapshots> <enabled>true</enabled> <!-- 允许下载 snapshots 版本的依赖 --> </snapshots> </repository> </repositories> <!-- 配置私服作为发布仓库 --> <distributionManagement> <repository> <id>your-repo-id</id> <!-- 仓库的唯一标识 --> <url>http://your-repo-url/repository/maven-releases/</url> <!-- 发布 releases 版本的 URL --> </repository> <snapshotRepository> <id>your-repo-id</id> <!-- 仓库的唯一标识 --> <url>http://your-repo-url/repository/maven-snapshots/</url> <!-- 发布 snapshots 版本的 URL --> </snapshotRepository> </distributionManagement> <!-- 其他配置 --> </project>
2. 配置私服的认证信息
私服通常需要用户名和密码进行认证。你需要在 Maven 的 settings.xml 文件中配置认证信息。
settings.xml 配置
-
找到 Maven 的
settings.xml文件,通常位于:-
Linux/Mac:
~/.m2/settings.xml -
Windows:
C:\Users\<你的用户名>\.m2\settings.xml
-
-
在
<servers>中添加私服的认证信息:<settings> <servers> <server> <id>your-repo-id</id> <!-- 与 pom.xml 中的仓库 ID 一致 --> <username>your-username</username> <!-- 私服的用户名 --> <password>your-password</password> <!-- 私服的密码 --> </server> </servers> </settings>
3. 将依赖或工件上传到私服
如果你需要将本地的 JAR 文件(如 zero.jar)上传到私服,可以使用 Maven 的 deploy:deploy-file 命令。
上传 JAR 到私服
mvn deploy:deploy-file \
-DgroupId=zero \ -DartifactId=xyz.haijin \ -Dversion=1.0 \ -Dpackaging=jar \ -Dfile=src/main/resources/lib/zero.jar \ -DrepositoryId=your-repo-id \ -Durl=http://your-repo-url/repository/maven-releases/
参数说明
-
-DgroupId:组 ID。 -
-DartifactId:工件 ID。 -
-Dversion:版本号。 -
-Dpackaging:打包类型(如jar)。 -
-Dfile:本地 JAR 文件的路径。 -
-DrepositoryId:私服的 ID(与settings.xml中的<server>ID 一致)。 -
-Durl:私服的 URL。
4. 从私服下载依赖
在 pom.xml 中配置好私服后,Maven 会自动从私服下载依赖。例如:
<dependency> <groupId>zero</groupId> <artifactId>xyz.haijin.zero</artifactId> <version>1.0</version> </dependency>
5. 部署项目到私服
如果你希望将整个项目构建的工件(如 JAR 或 WAR 文件)发布到私服,可以使用以下命令:
mvn clean deploy
Maven 会根据 pom.xml 中的 <distributionManagement> 配置,将构建的工件上传到私服。
6. 私服常见配置示例
以下是常见的私服配置示例:
Nexus 私服
-
Releases 仓库 URL:
http://your-repo-url/repository/maven-releases/ -
Snapshots 仓库 URL:
http://your-repo-url/repository/maven-snapshots/ -
Public 仓库 URL:
http://your-repo-url/repository/maven-public/
Artifactory 私服
-
Releases 仓库 URL:
http://your-repo-url/artifactory/libs-release-local/ -
Snapshots 仓库 URL:
http://your-repo-url/artifactory/libs-snapshot-local/ -
Public 仓库 URL:
http://your-repo-url/artifactory/libs-release/
总结
-
在
pom.xml中配置<repositories>和<distributionManagement>。 -
在
settings.xml中配置私服的认证信息。 -
使用
mvn deploy:deploy-file上传本地 JAR 文件到私服。 -
使用
mvn clean deploy将项目构建的工件发布到私服。