Maven Jar包製作與上傳及基本使用 原

本文主要爲以後Dubbo分佈式系統搭建做準備

之前早的時候,僅使用Nexus OSS搭建Maven私服,並上傳Maven倉庫中沒有的第三方Jar包,也上傳過自己製作的Jar包。但是那會並沒有考慮上傳javadocsource包。

概要

新建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>

最後

這個流程終於走通了~ 爲了更美好的明天而戰~~ 艾歐尼亞不會滅亡~~~ 好吧,我去前面探探路~~~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章