内网环境搭建Nexus私服 + 批量上传jar

内网环境搭建Nexus私服 + 批量上传jar

由于环境的限制,很多传统it项基于内网开发的(无互联网),这样在团队协作时,维护一个统一的包版本,在互联网环境下是一个小问题,在内网环境下却是一个大问题。
这篇博客主要是分享如何在内网环境下构建Nexus。建议根据实际需求,直接看相关段落。

一. 环境介绍

  • 本机
    • jdk: 1.8, 需配置环境变量
    • maven: 3.3.9, 需配置环境变量
    • python:3.6.2,需配置环境变量 (用于执行批量上传jar包的脚本)
  • 服务器
    • jdk: 1.8, 需配置环境变量
    • maven: 3.3.9, 需配置环境变量
    • Centos7
    • Nexus-3.9.0-01

二. Nexus安装及环境配置

  • 官网下载:https://www.sonatype.com/download-oss-sonatype
  • 解压:tar -zxvf [文件名]
  • 运行:在解压后目录下的bin文件夹下,执行./nexus run &
  • 访问:ip:端口;默认用户名:admin, 默认密码:admin123
  • 设置开机自启动:
    	ln -s /usr/local/nexus-3.9.0-02/bin/nexus /etc/init.d/nexus3
    	chkconfig --add nexus3
    	chkconfig nexus3 on
    
  • 修改 nexus3 的运行用户为 root:
    	// 在nexus的bin目录中
    	vim nexus.rc 
    	//设置
    	run_as_user="root"
    
  • 修改 nexus3 启动时要使用的 jdk 版本
    	// 在nexus的bin目录中
    	vim nexus 
    	//第14行
    	INSTALL4J_JAVA_HOME_OVERRIDE=/usr/java/jdk1.8.0_131
    
  • 修改 nexus3 默认端口 (可选):
    	cd /usr/nexus/nexus-3.9.0-02/etc/
    	vim nexus-default.properties
    
  • 修改 nexus3 数据以及相关日志的存储位置 (可选):
    	 // 在nexus的bin目录中```vim nexus.vmoptions```
    	-XX:LogFile=../sonatype-work/nexus3/log/jvm.log
    	-Dkaraf.data=../sonatype-work/nexus3
    	-Djava.io.tmpdir=../sonatype-work/nexus3/tmp
    

三. 本地仓库整理(dos脚本)(这一步很重要)

  • 执行下面dos脚本,清除本地库中下载失败的脏文件(请替换本地仓库地址)
@echo open
set REPOSITORY_PATH=F:\xusanduo\maven\repository
rem 正在搜索...
for /f "delims=" %%i in ('dir /b /s "%REPOSITORY_PATH%\*lastUpdated*"') do (
    del /s /q %%i
)
rem 搜索完毕
pause
  • 执行下面dos脚本,清除本地库中携带remote信息的文件(请替换本地仓库地址)
@echo open
set REPOSITORY_PATH=F:\xusanduo\maven\repository
rem 正在搜索...
for /f "delims=" %%i in ('dir /b /s "%REPOSITORY_PATH%\*_remote.repositories*"') do (
    del /s /q %%i
)
rem 搜索完毕
pause
  1. 清理完后,将本地仓库copy一份,命名为repo1, repo2
  2. 将本地maven settings.xml也copy一份,命名为setting-nexus.xml(内容详 七 ),将localRepo设置为repo2
  3. (四)中python脚本中的jar包文件路径,写为repo1

四. Python脚本生成上传jar包的maven命令

  • python安装和环境配置:略
  • 执行下面python代码,建议存为一个.py文件执行
#!/usr/bin/env python
# -*- coding: utf-8 -*

import os
import re

def write_file(path,logobj,repo_url,repo_id, maven_settings_file):
    count = 0
    #print path
    for fpathe,dirs,fs in os.walk(path):
        #print fpathe,dirs,fs
        for f in fs:
            if f.endswith(".pom"):
                jarname = f[0:-4]+".jar"
                jarpath= os.path.join(fpathe,jarname)
                pom = os.path.join(fpathe,f)
                if not os.path.isfile(jarpath):
                    # files no exist continue
                    continue
                info = get_pom_info(pom)
                if info:
                    groupId=info[0]
                    artifactId=info[1]
                    version=info[2]
                    deploy_common = "mvn deploy:deploy-file -DgroupId=%s -DartifactId=%s -Dversion=%s -Dpackaging=jar -Dfile=%s -Durl=%s -DrepositoryId=%s --settings=%s\n" % (groupId,artifactId,version,jarpath,repo_url,repo_id, maven_settings_file)
                    logobj.write(deploy_common)
                    print("生成命令 %d :%s" % (count, deploy_common))
                else:
                    print ("ERROR: ",f)

def get_pom_info(file):
    #print file
    file_object = open(file,'r', encoding='UTF-8')
    n = 0
    xlist = []
    try:
        while True:
            line = file_object.readline()
            #print line
            
            ret = re.search(r'(.*?)',line)
            if ret:
                groupId = ret.group(1)
                #print 'groupid '+groupId
                xlist.append(groupId)
            
            ret = re.search(r'(.*?)',line)
            if ret:
                artifactId = ret.group(1)
                xlist.append(artifactId)

            ret = re.search(r'(.*?)',line)
            if ret:
                version = ret.group(1)
                xlist.append(version)

            n = n+1
            if n== 40:
                break
    finally:
        file_object.close()
    return xlist
    

deploy_commons_io = open('C:output.txt', 'w', encoding='UTF-8')
local_repo = 'F:/xusanduo/maven/repository2' # 本地仓库
maven_settings_file = 'F:/xusanduo/maven/apache-maven-3.3.9/conf/settings-default2.xml' # 指定maven setting.xml 文件
repo_url = 'http://59.32.1.48:9999/repository/3rd-part/' # 建议直接从nexus web界面copy,以免写错
repo_id = '3rd-part' # 和 maven_settings_file 中的某个server的id
write_file(local_repo,deploy_commons_io, repo_url, repo_id, maven_settings_file) # 运行生成maven命令的方法
deploy_commons_io.close() # 关闭资源

五. 使用生成的maven命令,上传jar到私服

  • 打开cmd,将生成的文件中的maven命令,copy到cmd窗口中
  • 建议先copy一条试一试(没准你参数填错了导致生成了错误的命令呢)
  • 不要用powershell

六. 注意事项

  1. Nexus私服不要用3.6系列版本,因为页面没有upload按钮,无法在web界面手动上传jar包,建议用3.9版本。
  2. 生成的maven命令,不要在powershell中执行,一定要在cmd中执行。
  3. 建议生成maven命令之后,先运行一条试试,看看生成的命令有没有错。
  4. 一定要先清理本地仓库,再用Python生成maven命令。
  5. python严格缩进,空格必须是半角,如果python复制粘贴后有问题,请文本搜索’\u3000’, 它代表全角的空格。
  6. (三) 很重要
七. setting-nexus.xml


<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
 
  <localRepository>F:/xusanduo/maven/repository2localRepository>

  <pluginGroups>
    
  pluginGroups>

  <proxies>
    
  proxies>

  <servers>
	<server>
      <id>nexus-releasesid>
      <username>adminusername>
      <password>admin123password>
    server>
	<server>
      <id>nexus-snapshotsid>
      <username>adminusername>
      <password>admin123password>
    server>
	<server>
      <id>3rd-partid>
      <username>adminusername>
      <password>admin123password>
    server>
  servers>

  <mirrors>
	<mirror>
      <id>nexusid>
      <mirrorOf>*mirrorOf>
      <url>http://59.32.1.48:9999/repository/maven-public/url>
    mirror>
	
	
  mirrors>

  <profiles>
	<profile>
      <id>nexus-profilesid>
	  
      <repositories>
		<repository>
			<id>nexusid>
			<name>local private nexusname>
			<url>http://59.32.1.48:9999/repository/maven-public/url>
			<releases>
				<enabled>trueenabled>
				<updatePolicy>alwaysupdatePolicy>
				<checksumPolicy>warnchecksumPolicy>			
			releases>
			<snapshots>
				<enabled>falseenabled>
			snapshots>			
		repository>
		
	  repositories>
	  
	  <pluginRepositories>
		<pluginRepository>
			<id>nexusid>
			<name>local private nexusname>
			<url>http://59.32.1.48:9999/repository/maven-public/url>
			<releases>
				<enabled>trueenabled>
				<updatePolicy>alwaysupdatePolicy>
				<checksumPolicy>warnchecksumPolicy>			
			releases>
			<snapshots>
				<enabled>falseenabled>
			snapshots>	
		pluginRepository>
	  pluginRepositories>
    profile>
  profiles>

  <activeProfiles>
    <activeProfile>nexus-profilesactiveProfile>
  activeProfiles>
settings>

八. 项目pom.xml里的私服配置
  • 项目打包:mvn clean install -Dmaven.test.skip=true -s [指定上面的特殊setting xml]
<distributionManagement>
	<repository>
		<id>nexus-releasesid> 
		<url>http://59.32.1.48:9999/repository/maven-releases/url>
	repository>
	<snapshotRepository>
		<id>nexus-snapshotsid> 
		<url>http://59.32.1.48:9999/repository/maven-snapshots/url>
	snapshotRepository>
distributionManagement>

你可能感兴趣的:(原创分享,nexus,maven,maven私服,nexus私服,nexus上传)