在项目的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
将项目构建的工件发布到私服。