本文主要爲以後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>
最後
這個流程終於走通了~ 爲了更美好的明天而戰~~ 艾歐尼亞不會滅亡~~~ 好吧,我去前面探探路~~~~