Maven Jar包制作与上传及基本使用

一曲冷凌霜 提交于 2020-04-10 09:55:28

本文主要为以后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>

最后

这个流程终于走通了~ 为了更美好的明天而战~~ 艾欧尼亚不会灭亡~~~ 好吧,我去前面探探路~~~~

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!