maven 私服

正式开发,不同的项目组开发不同的工程。

dao 工程开发完毕,发布到私服。

service 从私服下载 dao

公司在自己的局域网内搭建自己的远程仓库服务器,称为私服,私服服务器即是公司内 部的 maven 远程仓库,每个员工的电脑上安装 maven 软件并且连接私服服务器,员工将自 己开发的项目打成 jar 并发布到私服服务器,其它项目组从私服服务器下载所依赖的构件

(jar)。

私服还充当一个代理服务器,当私服上没有 jar 包会从互联网中央仓库自动下载,如下 图:

  • 下载 nexus

Nexus 是 Maven 仓库管理器,通过 nexus 可以搭建 maven 仓库,同时 nexus 还提供强 大的仓库管理功能,构件搜索功能等。

下载 Nexus, 下载地址:http://www.sonatype.org/nexus/archived/

下载:nexus-2.12.0-01-bundle.zip

解压 nexus-2.12.0-01-bundle.zip,本教程将它解压在 F 盘,进入 bin 目录:

cmd 进入 bin 目录,执行 nexus.bat install

安装成功在服务中查看有 nexus 服务:

cmd 进入 nexus 的 bin 目录,执行:nexus.bat uninstall

查看 window 服务列表 nexus 已被删除。

方法 1:

cmd 进入 bin 目录,执行 nexus.bat start

方法 2:

直接启动 nexus 服务

查看 nexus 的配置文件 conf/nexus.properties

# Jetty section

application-port=8081 # nexus 的访问端口配置 application-host=0.0.0.0 # nexus 主机监听配置(不用修改) nexus-webapp=${bundleBasedir}/nexus # nexus 工程目录 nexus-webapp-context-path=/nexus # nexus 的 web 访问路径

# Nexus section

nexus-work=${bundleBasedir}/../sonatype-work/nexus # nexus 仓库目录

runtime=${bundleBasedir}/nexus/WEB-INF # nexus 运行程序目录

访问:

http://localhost:8081/nexus/

使用 Nexus 内置账户 admin/admin123 登陆: 点击右上角的 Log in,输入账号和密码 登陆

登陆成功:

nexus

查看 nexus 的仓库:

nexus 的仓库有 4 种类型:

1. hosted,宿主仓库,部署自己的 jar 到这个类型的仓库,包括 releases 和 snapshot 两部 分,Releases 公司内部发布版本仓库、 Snapshots 公司内部测试版本仓库

2. proxy,代理仓库,用于代理远程的公共仓库,如 maven 中央仓库,用户连接私服,私 服自动仓库下载 jar 包或者插件。

3. group,仓库组,用来合并多个 hosted/proxy 仓库,通常我们配置自己的 maven 连接仓 库组。

4. virtual(虚拟):兼容 Maven1 版本的 jar 或者插件

nexus 仓库默认在 sonatype-work 目录中:

  • apache-snapshots:代理仓库

存储 snapshots 构件,代理地址 https://repository.apache.org/snapshots/

  • central-m1:virtual 类型仓库,兼容 Maven1 版本的 jar 或者插件
  • snapshots:本地仓库,存储 snapshots 构件。
  • thirdparty:第三方仓库
  • public:仓库组

4. 将项目发布到私服

4.1 需求

企业中多个团队协作开发通常会将一些公用的组件、开发模块等发布到私服供其它团队 或模块开发人员使用。

本例子假设多团队分别开发 dao、service、web,某个团队开发完在 dao 会将 dao 发布到私服供 service 团队使用,本例子会将 dao 工程打成 jar 包发布到私服。

上传

上传

maven-dao 工程

私服(服务端) nexus

maven-service 工程

第一步:需要在客户端即部署 dao 工程的电脑上配置 maven 环境,并修改 settings.xml

文件,配置连接私服的用户和密码 。 此用户名和密码用于私服校验,因为私服需要知道上传的账号和密码是否和私服中的账号和 密码一致。

releases 连接发布版本项目仓库

snapshots 连接测试版本项目仓库

第二步: 配置项目 pom.xml

配置私服仓库的地址,本公司的自己的 jar 包会上传到私服的宿主仓库,根据工程的版本号 决定上传到哪个宿主仓库,如果版本为 release 则上传到私服的 release 仓库,如果版本为 snapshot 则上传到私服的 snapshot 仓库

注意:pom.xml 这里<id> 和 settings.xml 配置 <id> 对应!

将项目 dao 工程打成 jar 包发布到私服:

1、首先启动 nexus

2、对 dao 工程执行 deploy 命令

根据本项目pom.xml中version定义决定发布到哪个仓库,如果 version定义为 snapshot, 执行 deploy 后查看 nexus 的 snapshot 仓库,如果 version 定义为 release 则项目将发布到 nexus 的 release 仓库,本项目将发布到 snapshot 仓库:

也可以通过 http 方式查看:

5.1 需求

没有配置 nexus 之前,如果本地仓库没有,仓库下载,通常在企业中会在局域网 内部署一台私服服务器,有了私服本地项目首先去本地仓库找 jar,如果没有找到则连接私 服从私服下载 jar 包,如果私服没有 jar 包私服同时作为代理服务器从中央仓库下载 jar 包, 这样做的好处是一方面由私服对公司项目的依赖 jar 包统一管理,一方面提高下载速度,项 目连接私服下载 jar 包的速度要比项目连接中央仓库的速度快的多。

本例子测试从私服下载 dao 工程 jar 包。

nexus中包括很多仓库,hosted 中存放的是企业自己发布的jar包及第三方公司的 jar包, proxy 中存放的是中央仓库的 jar,为了方便从私服下载 jar 包可以将多个仓库组成一个仓库 组,每个工程需要连接私服的仓库组下载 jar 包。

打开 nexus 配置仓库组,如下图:

上图中仓库组包括了本地仓库、代理仓库等。

在客户端的 setting.xml 中配置私服的仓库,由于 setting.xml 中没有 repositories 的配置 标签需要使用 profile 定义仓库。

<profile>

<!–profile 的 id–>

<id>dev</id>

<repositories>

<repository>

<!–仓库 id,repositories 可以配置多个仓库,保证 id 不重复–>

<id>nexus</id>

<!–仓库地址,即 nexus 仓库组的地址–>

<url>http://localhost:8081/nexus/content/groups/public/</url>

<!–是否下载 releases 构件–>

<releases>

<enabled>true</enabled>

</releases>

<!–是否下载 snapshots 构件–>

<snapshots>

<enabled>true</enabled>

</snapshots>

</repository>

</repositories>

<pluginRepositories>

<!– 插件仓库,maven 的运行依赖插件,也需要从私服下载插件 –>

<pluginRepository>

<!– 插件仓库的 id 不允许重复,如果重复后边配置会覆盖前边 –>

<id>public</id>

<name>Public Repositories</name>

<url>http://localhost:8081/nexus/content/groups/public/</url>

</pluginRepository>

</pluginRepositories>

</profile>

使用 profile 定义仓库需要激活才可生效。

<activeProfiles>

<activeProfile>dev</activeProfile>

</activeProfiles>

配置成功后通过 eclipse 查看有效 pom,有效 pom 是 maven 软件最终使用的 pom 内容,程 序员不直接编辑有效 pom,打开有效 pom

有效 pom 内容如下:

下边的 pom 内容中有两个仓库地址,maven 会先从前边的仓库的找,如果找不到 jar 包再从 下边的找,从而就实现了从私服下载 jar 包。

测试 1:局域网环境或本地网络即可

在 service 工程中添加以上配置后,添加dao 工程的依赖,删除本地仓库中dao

工程,同时在 eclipse 中关闭 dao 工程。 观察控制台:

项目先从本地仓库找 dao,找不到从私服找,由于之前执行 deploy 将 dao 部署到 私服中,所以成功从私服下载 dao 并在本地仓库保存一份。

如果此时删除私服中的 dao,执行 update project 之后是否正常? 如果将本地仓库的 dao 和私服的 dao 全部删除是否正常? 测试 2:需要互联网环境

在项目的 pom.xml 添加一个依赖,此依赖在本地仓库和私服都不存在,maven 会先从本 地仓库找,本地仓库没有再从私服找,私服没有再仓库下载,jar 包下载成功在私服、 本地仓库分别存储一份。

mvn install:install-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.1.37

-Dfile= fastjson-1.1.37.jar -Dpackaging=jar

需要在 maven 软件的核心配置文件 settings.xml 中配置第三方仓库的 server 信息

<server>

<id>thirdparty</id>

<username>admin</username>

<password>admin123</password>

</server>

才能执行一下命令

mvn deploy:deploy-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.1.37

-Dpackaging=jar -Dfile=fastjson-1.1.37.jar

-Durl=http://localhost:8081/nexus/content/repositories/thirdparty/

-DrepositoryId=thirdparty

DgroupId 和 DartifactId 构成了该 jar 包在 pom.xml 的坐标,项目就是依靠这两个属性定位。 自己起名字也行。

Dfile 表示需要上传的 jar 包的绝对路径。

Durl 私服上仓库的位置,打开 nexus——>repositories 菜单,可以看到该路径。

DrepositoryId 服务器的表示 id,在 nexus 的 configuration 可以看到。

Dversion 表示版本信息,

关于 jar 包准确的版本: 包的名字上一般会带版本号,如果没有那可以解压该包,会发现一个叫 MANIFEST.MF 的文件,

这个文件就有描述该包的版本信息。

比如 Specification-Version: 2.2 可以知道该包的版本了。 上传成功后,在 nexus 界面点击 3rd party 仓库可以看到这包

dex2jar工具之二

1.首先找到Android软件安装包中的class.dex把apk文件改名为.zip,然后解压缩找到其中的class.dex文件(或者用7z提取有时间不行),它就是java文件编译再通过dx工具打包成的,所以现在我们就用dex2jar工具来逆方向导出java源文件;

2.把class.dex拷贝到dex2jar.bat所在目录,即dex2jar目录下。

在运行中输入cmd,回车。进入dex2jar所在的目录然后运行

dex2jar.bat classes.dex,生成classes-dex2jar.jar就是所要转化jar包。

如:dex2jar在d盘目录下则输入命令:d:\\> cd dex2jar

d:\\>dex2jar>dex2jar.bat classes.dex 回车就可以在dex2jar目录下找到classes-dex2jar.bat.jar

——————转自网络—————

dex2jar用法

dex2jar:是dex格式文件与jar文件的转换。

下载安装 dex2jar地址:https://sourceforge.net/p/dex2jar

下载之后解压:

解压后

压缩包里,含有多个工具,最常用的是d2j-dex2jar.bat

d2j-dex2jar功能– 将dex转换为jar

用法: d2j-dex2jar [options] <0号文件> [其他文件]

options:

-d,–debug-info 翻译调试信息-e,–exception-file <file> 具体的异常信息文件,默认是$current_dir/[file-name]-error.zip-f,–force 强制覆写-h,–help 显示此帮助信息-n,–not-handle-exception 不捕获dex2jar抛出的任何异常-o,–output <out-jar-file> 输出.jar文件,默认是$current_dir/[file-name]-dex2jar.jar-os,–optmize-synchronized 同步调整-p,–print-ir 将ir输出到Syste.out-r,–reuse-reg 生成java的.class文件时循环使用注册表-s 与–topological-sort/-ts相同-ts,–topological-sort 以拓扑逻辑整理块,能够生成更多可读代码-v,–verbose 显示进度

将需要反编译的dex文件复制到 dex2jar 解压目录下

输入命令: d2j-dex2jar.bat classes.dex

接下来,安装 jd-gui查看jar的内容。

d2j-jar2dex – 调用dx将jar转换为dex

用法: d2j-jar2dex [参数] <目录>

参数:-f,–force 强制覆写-h,–help 显示此帮助信息-o,–output <out-dex-file> 输出.dex文件,默认路径是$current_dir/[jar-name]-jar2dex.dex

d2j-jasmin2jar–将.j文件编译为.class文件

用法: d2j-jasmin2jar [参数] <路径>

参数:-e,–encoding <enc> 指定.j文件编码方式,默认是UTF-8-f,–force 强制覆写-g,–autogenerate-linenumbers 自动生成行号-h,–help 显示此帮助信息-o,–output <out-jar-file> 输出.jar文件,默认是$current_dir/[jar-name]-jasmin2jar.jar

d2j-jar-access–增加或移除jar文件中对类(class)/方法(method)/域(field)的访问

用法: d2j-jar-access [参数] <jar文件>

参数:-ac,–add-class-access <ACC> 增加对class中内容的访问-af,–add-field-access <ACC> 增加对field中内容的访问-am,–add-method-access <ACC> 增加对method中内容的访问-f,–force 强制覆写-h,–help 显示此帮助信息-o,–output <out-dir> 指定.j文件输出路径,默认是$current_dir/[jar-name]-access.jar-rc,–remove-class-access <ACC> 移除对class中内容的访问-rd,–remove-debug 移除调试信息-rf,–remove-field-access <ACC> 移除对field中内容的访问-rm,–remove-method-access <ACC> 移除对method中内容的访问

d2j-apk-sign–用测试证书对apk文件进行数字签名

用法: d2j-apk-sign [参数] <apk文件路径>

参数:-f,–force 强制覆写-h,–help 显示此帮助信息-o,–output <out-apk-file> 输出.apk文件,默认路径是$current_dir/[apk-name]-signed.apk-w,–sign-whole 对整个apk文件进行签名

d2j-jar2jasmin–反汇编jar文件中的.class文件至jasmin文件

用法: d2j-jar2jasmin [参数] <jar文件路径>

参数:-d,–debug 反汇编调试信息-e,–encoding <enc> .j文件的编码方式,默认是UTF-8-f,–force 强制覆写-h,–help 显示此帮助信息-o,–output <out-dir> .j文件的输出路径,默认是$current_dir/[jar-name]-jar2jasmin/

本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com

点赞 0
收藏 0

文章为作者独立观点不代本网立场,未经允许不得转载。