使用maven创建项目,配置私服、发布等,并发布到sonatype oss nexus仓库。
系统要求
Maven 3.9+ requires JDK 8 or above to execute.
下载maven
maven 3.9.8 下载tar.gz:
apache-maven-3.9.8-bin.tar.gz
下载链接:
maven.apache.org/download.cg…
安装
- 解压apache-maven-3.9.8-bin.tar.gz到指定目录**/usr/local/maven**
# -z 表示gzip压缩的tar包。
# -x 表示解压。
# -v 表示显示过程中的信息。
# -f 表示后面跟压缩文件名。
# apache-maven-3.9.8-bin.tar.gz 是压缩文件的名字。
# -C /usr/local/maven 表示将解压到指定的目录。 注意目录需要存在
# --strip-components 1 表示脱去一层目录。
tar -xzvf apache-maven-3.9.8-bin.tar.gz -C /usr/local/maven --strip-components 1
- 配置环境变量
笔记是macos操作系统shell类型是zsh, 如果是linux bash,需要配置vi ~/.bashrc, 如果是window则在环境变量添加
vi ~/.zshrc
追加
export M2_HOME=/usr/local/maven
export PATH=$PATH:$M2_HOME/bin
- 修改conf/settings.xml文件
# 1. 修改仓库存储位置, 默认是${user.home}/.m2/repository, 笔记习惯性修改到扩展硬盘上
...
<localRepository>/path/to/local/repo</localRepository>
...
# 2. 在<servers></servers>节点中增加账号
....
注意 以下配置的id, 在项目中会使用
<servers>
...
<server>
<id>local-releases</id>
<username>deploy</username>
<password>123456</password>
</server>
<server>
<id>local-snapshots</id>
<username>deploy</username>
<password>123456</password>
</server>
<server>
<id>local-repo</id>
<username>deploy</username>
<password>123456</password>
</server>
...
</servers>
...
注意:local-releases,local-snapshots,local-repo这3个id需要记住,在项目中需要使用。
source ~/.zshrc 激活
- 查看maven版本
mvn -version
Apache Maven 3.9.8 (36645f6c9b5079805ea5009217e36f2cffd34256)
Maven home: /Volumes/data/software/maven
Java version: 17.0.11, vendor: Oracle Corporation, runtime: /Volumes/data/software/java/graalvm-jdk-17.0.11+7.1/Contents/Home
Default locale: zh_CN_#Hans, platform encoding: UTF-8
OS name: "mac os x", version: "12.5", arch: "x86_64", family: "mac"
创建项目
- groupId: com.clibing
- artifactId: demo
- 创建项目
mvn archetype:generate -DgroupId=com.clibing -DartifactId=demo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
cd demo
mvn install
- 配置私服
编辑 pom.xml
cd demo
vi pom.xml
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.clibing</groupId>
<artifactId>demo</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>demo</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<distributionManagement>
<repository>
<id>local-releases</id>
<url>http://localhost:8081/repository/release/</url>
</repository>
<snapshotRepository>
<id>local-snapshots</id>
<url>http://localhost:8081/repository/snapshots/</url>
</snapshotRepository>
</distributionManagement>
<repositories>
<repository>
<id>local-repo</id>
<url>http://localhost:8081/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</project>
发布
mvn clean install -Dmaven.test.skip=true deploy
输出日志
[INFO] Scanning for projects...
[INFO]
[INFO] --------------------------< com.clibing:demo >--------------------------
[INFO] Building demo 1.0-SNAPSHOT
[INFO] from pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- clean:3.2.0:clean (default-clean) @ demo ---
[INFO] Deleting /Volumes/data/workspace/temp/demo/target
[INFO]
[INFO] --- resources:3.3.1:resources (default-resources) @ demo ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /Volumes/data/workspace/temp/demo/src/main/resources
[INFO]
[INFO] --- compiler:3.13.0:compile (default-compile) @ demo ---
[INFO] Recompiling the module because of changed source code.
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[INFO] Compiling 1 source file with javac [debug target 1.8] to target/classes
[WARNING] 未与 -source 8 一起设置引导类路径
[INFO]
[INFO] --- resources:3.3.1:testResources (default-testResources) @ demo ---
[INFO] Not copying test resources
[INFO]
[INFO] --- compiler:3.13.0:testCompile (default-testCompile) @ demo ---
[INFO] Not compiling test sources
[INFO]
[INFO] --- surefire:3.2.5:test (default-test) @ demo ---
[INFO] Tests are skipped.
[INFO]
[INFO] --- jar:3.4.1:jar (default-jar) @ demo ---
[INFO] Building jar: /Volumes/data/workspace/temp/demo/target/demo-1.0-SNAPSHOT.jar
[INFO]
[INFO] --- install:3.1.2:install (default-install) @ demo ---
[INFO] Installing /Volumes/data/workspace/temp/demo/pom.xml to /Volumes/data/storage/m2_repository/com/clibing/demo/1.0-SNAPSHOT/demo-1.0-SNAPSHOT.pom
[INFO] Installing /Volumes/data/workspace/temp/demo/target/demo-1.0-SNAPSHOT.jar to /Volumes/data/storage/m2_repository/com/clibing/demo/1.0-SNAPSHOT/demo-1.0-SNAPSHOT.jar
[INFO]
[INFO] --- resources:3.3.1:resources (default-resources) @ demo ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /Volumes/data/workspace/temp/demo/src/main/resources
[INFO]
[INFO] --- compiler:3.13.0:compile (default-compile) @ demo ---
[INFO] Nothing to compile - all classes are up to date.
[WARNING] Overwriting artifact's file from /Volumes/data/workspace/temp/demo/target/demo-1.0-SNAPSHOT.jar to /Volumes/data/workspace/temp/demo/target/classes
[INFO]
[INFO] --- resources:3.3.1:testResources (default-testResources) @ demo ---
[INFO] Not copying test resources
[INFO]
[INFO] --- compiler:3.13.0:testCompile (default-testCompile) @ demo ---
[INFO] Not compiling test sources
[INFO]
[INFO] --- surefire:3.2.5:test (default-test) @ demo ---
[INFO] Tests are skipped.
[INFO]
[INFO] --- jar:3.4.1:jar (default-jar) @ demo ---
[INFO]
[INFO] --- install:3.1.2:install (default-install) @ demo ---
[INFO] Installing /Volumes/data/workspace/temp/demo/pom.xml to /Volumes/data/storage/m2_repository/com/clibing/demo/1.0-SNAPSHOT/demo-1.0-SNAPSHOT.pom
[INFO] Installing /Volumes/data/workspace/temp/demo/target/demo-1.0-SNAPSHOT.jar to /Volumes/data/storage/m2_repository/com/clibing/demo/1.0-SNAPSHOT/demo-1.0-SNAPSHOT.jar
[INFO]
[INFO] --- deploy:3.1.2:deploy (default-deploy) @ demo ---
Downloading from local-snapshots: http://localhost:8081/repository/snapshots/com/clibing/demo/1.0-SNAPSHOT/maven-metadata.xml
Uploading to local-snapshots: http://localhost:8081/repository/snapshots/com/clibing/demo/1.0-SNAPSHOT/demo-1.0-20240712.070318-1.pom
Uploaded to local-snapshots: http://localhost:8081/repository/snapshots/com/clibing/demo/1.0-SNAPSHOT/demo-1.0-20240712.070318-1.pom (1.3 kB at 905 B/s)
Uploading to local-snapshots: http://localhost:8081/repository/snapshots/com/clibing/demo/1.0-SNAPSHOT/demo-1.0-20240712.070318-1.jar
Uploaded to local-snapshots: http://localhost:8081/repository/snapshots/com/clibing/demo/1.0-SNAPSHOT/demo-1.0-20240712.070318-1.jar (2.2 kB at 2.5 kB/s)
Downloading from local-snapshots: http://localhost:8081/repository/snapshots/com/clibing/demo/maven-metadata.xml
Uploading to local-snapshots: http://localhost:8081/repository/snapshots/com/clibing/demo/1.0-SNAPSHOT/maven-metadata.xml
Uploaded to local-snapshots: http://localhost:8081/repository/snapshots/com/clibing/demo/1.0-SNAPSHOT/maven-metadata.xml (759 B at 1.7 kB/s)
Uploading to local-snapshots: http://localhost:8081/repository/snapshots/com/clibing/demo/maven-metadata.xml
Uploaded to local-snapshots: http://localhost:8081/repository/snapshots/com/clibing/demo/maven-metadata.xml (273 B at 610 B/s)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9.106 s
[INFO] Finished at: 2024-07-12T15:03:27+08:00
[INFO] ------------------------------------------------------------------------
私服预览
deploy后的,私服的列表
清理本机快照数据
自己用golang写了一个清理本地过时的maven snapshots jar包,只保留最后一个, 支持预览、确认删除
# 查看将要删除的jar列表
knife system maven /Volumes/data/storage/m2_repository
# 确认删除
knife system maven -c /Volumes/data/storage/m2_repository