本文主要为以后Dubbo分布式系统搭建做准备
之前早的时候,仅使用Nexus OSS搭建Maven私服,并上传Maven仓库中没有的第三方Jar包,也上传过自己制作的Jar包。但是那会并没有考虑上传
javadoc
和source
包。
概要
新建Maven项目
整体结构如下
➜ core-api tree
.
├── core-api.iml
├── pom.xml
├── src
│ ├── main
│ │ ├── java
│ │ │ └── cn
│ │ │ └── lpe234
│ │ │ └── demo
│ │ │ ├── models
│ │ │ │ └── User.java
│ │ │ └── services
│ │ │ └── UserService.java
│ │ └── resources
│ └── test
│ └── java
pom.xml 示例如下
<?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>
<!-- 模块整体配置 -->
<groupId>cn.lpe234.demo</groupId>
<artifactId>core-api</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 打包方式 -->
<packaging>jar</packaging>
<!-- 名称、描述、链接 (文档打包需要,简要配置即可) -->
<name>core-api</name>
<description>demo core-api</description>
<url>http://lpe234.cn/demo/core-api</url>
<!-- 证书配置 (内部使用,无需过多考虑) -->
<licenses>
<license>
<name>The Apache Software License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
<distribution>repo</distribution>
</license>
</licenses>
<!-- 软件配置管理 (内部使用,替换代码仓库地址即可) -->
<scm>
<connection>scm:git:git://gitlab.com/lpe234/core-api.git</connection>
<url>http://gitlab.com/lpe234/core-api.git</url>
<developerConnection>scm:git:git://gitlab.com/lpe234/core-api.git</developerConnection>
</scm>
</project>
User.java 示例代码
package cn.lpe234.demo.models;
/**
* 用户类
* Created by lpe234 on 2017/10/25.
*/
public class User {
private Long uid;
private String username;
private Integer age;
public Long getUid() {
return uid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
UserService.java
切记:注释一定要详细准确!
package cn.lpe234.demo.services;
import cn.lpe234.demo.models.User;
/**
* 用户相关服务接口
* Created by lpe234 on 2017/10/25.
*/
public interface UserService {
/**
* 用户是否有效
* @param uid 用户ID
* @return true: 有效, false: 无效
*/
boolean isValid(Long uid);
/**
* 根据uid获取用户信息
* @param uid 用户ID
* @return 返回用户信息
*/
User getByUid(Long uid);
}
执行打包命令
# 如果执行成功,则可以在项目目录下面发现`target`文件夹。
➜ core-api mvn source:jar javadoc:jar repository:bundle-create
打包后的结构
# 已忽略二级以下的文件及文件夹
➜ core-api tree -L 2
.
├── core-api.iml
├── pom.xml
├── src
│ ├── main
│ └── test
└── target
├── apidocs
├── classes
├── core-api-1.0-SNAPSHOT-bundle.jar
├── core-api-1.0-SNAPSHOT-javadoc.jar
├── core-api-1.0-SNAPSHOT-sources.jar
├── core-api-1.0-SNAPSHOT.jar
├── javadoc-bundle-options
├── maven-archiver
└── maven-status
9 directories, 6 files
此时已经得到 core-api-1.0-SNAPSHOT-javadoc.jar
, core-api-1.0-SNAPSHOT-sources.jar
, core-api-1.0-SNAPSHOT.jar
三个关键jar包。
插件打包
另外也可以使用Maven插件进行打包,增加以下内容到项目pom.xml文件 即可
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.10.4</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
本地安装
# 安装jar包
➜ core-api mvn install:install-file -Dfile=target/core-api-1.0-SNAPSHOT.jar -DgroupId=cn.lpe234.demo -DartifactId=core-api -Dversion=1.0-SNAPSHOT -Dpackaging=jar
# 安装source包
➜ core-api mvn install:install-file -Dfile=target/core-api-1.0-SNAPSHOT.jar -DgroupId=cn.lpe234.demo -DartifactId=core-api -Dversion=1.0-SNAPSHOT -Dpackaging=jar -Dclassifiler=sources
# 安装javadoc包
➜ core-api mvn install:install-file -Dfile=target/core-api-1.0-SNAPSHOT.jar -DgroupId=cn.lpe234.demo -DartifactId=core-api -Dversion=1.0-SNAPSHOT -Dpackaging=jar -Dclassifiler=javadoc
部署到Nexus OSS私服
部署到网络服务器,其他用户才能够很方便的去下载使用和更新。
这块有一个重点:关于Nexus仓库的配置,需要将仓库设置为 Maven2(hosted) + Version policy(Snaphost/Mixed) + Deployment policy。版本如果为Release的话,发布SNAPSHOT时会报400错误。
使用命令行部署
并不推荐这个方法,对于javadoc, sources并没有上传成功,可能是参数写的有问题吧。以下命令可以正常上传jar。
mvn deploy:deploy-file -Dfile=target/core-api-1.0-SNAPSHOT.jar -DgroupId=cn.lpe234.demo -DartifactId=core-api -Dversion=1.0-SNAPSHOT -Dpackaging=jar -Durl=http://nexus-xxxxxx/repository/3rd_mixed/ -DrepositoryId=3rd_mixed
对于需要进行权限验证的Maven仓库。需要额外设置用户名及密码。
<!-- 在 ~/m.2/settings.xml 中, services 节点添加一个 server node,注意 <id> 的唯一识别性 -->
<servers>
<server>
<id>3rd_mixed</id>
<username>hj</username>
<password>hj123456</password>
</server>
</servers>
使用插件部署(推荐)
在项目的 pom.xml
中的 project
节点,添加如下内容
<distributionManagement>
<repository>
<id>3rd_party</id>
<name>3rd Party Repository</name>
<url>http://nexus-xxxxxx/repository/3rd_mixed/</url>
</repository>
</distributionManagement>
此时如果一切正常的话,执行
➜ core-api git:(master) ✗ mvn deploy
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building core-api 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plug
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 8.155 s
[INFO] Finished at: 2017-10-25T15:51:34+08:00
[INFO] Final Memory: 25M/255M
[INFO] ------------------------------------------------------------------------
去查看Nexus仓库,就可以找到刚刚上传的Jar包了。
外部引用
由于: 已经将源码和文档上传,所以引用时,可选择下载源码
。这样就能很方便的看到接口文档说明
。
<dependency>
<groupId>cn.lpe234.demo</groupId>
<artifactId>core-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
最后
这个流程终于走通了~ 为了更美好的明天而战~~ 艾欧尼亚不会灭亡~~~ 好吧,我去前面探探路~~~~