pom jar包冲突,通过jar包能否反编译出源代码

  pom jar包冲突,通过jar包能否反编译出源代码

  00-1010 1.反编译jar得到源代码1.1。使用jd-gui工具1.2。点击文件-打开文件,选择要反编译的jar1.3,保存反编译后的源代码2。创建一个新的pom项目2.1文件-new -project2.2 GroupId和ArtifactId可以自定义。2.3写出项目名称和保存项目文件的路径。2.4新建项目结构将自动填写如下。3.将jar源代码复制到pom项目中。3.1解压缩上面步骤中的zip输出。3.2补充pom文件中的配置。3.3检查源代码。3.4编译打包。本周,我接了一份工作,需要恢复jar代码来创建一个新的pom项目。一百多坛子还是挺累的,鼠标不灵敏。当然,这只是量的问题。下面我们来记录一下具体的操作方法。

  

目录

 

  00-1010这不需要安装。下载后,压缩包里有一个exe应用。打开jd-gui.exe,先设置,反编译后不需要注释。单击帮助-首选项,不要选中写入原始行号和写入元数据。

  00-1010或者直接将jar拖到jd-gui的窗口中。左侧列出了包路径和文件,右侧窗口显示源代码。

  

1. 反编译jar得到源码

文件-保存所有源文件,这些文件将以zip格式保存在本地计算机中。

 

  反编译后的源文件有些是正常的,有些可能需要手动修复代码,比如反编译后的goto关键字和超级指向错误。可以尝试其他的反编译工具,然后反编译后对比差异修复代码。这里还有一个反编译工具luyten,最新版本是0.0.5。还有很多其他的基地,可以在网上搜索。

  如果同时使用不同的反编译工具,建议以一个为主,其他作为辅助参考。因为不同的反编译工具在反编译代码上有一些差异。比如变量名,gd-gui是反编译的还是String str,而luyten反编译的还是String name,当然这个变量在整个类或者方法中是一致的,不会报错没多大关系,只是可读性是否容易理解源代码而已。在gd-gui格式上,会有很多断行和空行,不像luyten那样整齐易读。卢伊滕的反编译速度没有jd-gui快(Luyten点击单个文件后会在右下角显示进度条,代码100%时会显示在右边窗口)

  

1.1 使用jd-gui工具

 

  00-1010选择maven选项,项目SDK。如果是第一次使用ideal,选择本机的jdk安装目录,点击下一步。

  00-1010建议写项目名称,版本号默认不修改可自定义。

  00-1010(首次使用ideal时,需要设置项目路径)

  

1.2 点击file - open file 选中需要反编译的jar

 

  

1.3 保存反编译的源代码

 

  00-1010只需将主代码复制到新pom项目下的src-main-java目录即可。

  如果解压后发现里面有JAR,说明这个JAR创建的时候你原来用的是别人的JAR,那么这些解压后的JAR肯定需要用到新的pom项目中。可以参考下面的步骤3.2.1,也可以直接把它们放在项目下与main-src-java同级的目录中。然后,选择这些jar并右键单击as Library来构建依赖项。建议下面3.2.1步骤中的方案更加标准化。

  00-1010项目需要使用哪些jar这里需要写(参考pom.xml文件附在文末),下面只列出。

  了几个公网上可以自动下载到的jar。每次修改了pom文件后,右下角会出现弹框,点击import changes才会刷新依赖,java文件里面才能引用到新加的架包

  

 

  3.2.1 如果用到了自己封装的jar,需要在本地仓库(我的是安装maven时默认的C:UsersAdministrator.m2repository)下新建文件夹放好jar,下图圈出的三个分别是groupId、artifactId、version,可以自定义命名,最后文件夹下的架包命名是artifactId-version.jar(如下图就是fastjson-1.2.6.jar)

  

 

  pom里面配置如下

  

<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.6</version></dependency>

3.2.2 如果用到公司私服上的jar,需要在maven安装目录下的settings.xml文件里面配置私服的 地址/镜像。

 

  配置本地的maven仓库地址

  

<localRepository>D:my_mevanrepository</localRepository> # 自行修改本地地址

配置私服镜像

 

  

 <mirror> <id>nexus-aliyun</id> <mirrorOf>*</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/.../.../</url> # 填写你的url </mirror>

3.2.3 如果别人给了整个仓库给你,把仓库复制到C:UsersAdministrator.m2下即可,然后file->setting到下面这个界面,选择别人给你的仓库就不用自己本地的仓库了。此处不建议把别人仓库下的文件下合并到自己的repository下面,可能会有问题引用不到的哟

 

  

 

  

 

  

3.3 检查源代码

反编译后有问题的代码片段,根据代码上下文进行修复或者自己写个与原来功能一致的代替。若遇道switch(字符串)有红色波浪线时(jdk1.7版本才开始支持字符串类型),可以参考如下设置file->Project Structure

 

  

 

  Modules-> Source->language level选 8开头的这个(一般大于7开头均可)

  

 

  

3.4编译打包

点击右上侧的maven打开推窗,编辑package进行编译,等最下面的窗口打印日志,如果显示Process finished with exit code 0 表示打包成功,Process finished with exit code 1 表示有错误,根据日志提示修改完错误重试。打包成功后会出现target文件夹,里面存放的是编译之后的class和输出的jar

 

  

 

  pom文件附件

  

<?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>yulisao</groupId> <artifactId>yulisao</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <!--打包输出方式,可以是jar、war等格式 --> <name>这里写你的项目名称</name> <description>这里写项目简要描述</description> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <!--构建项目配置--> <!--这个可以解决因switch(字符串)无法编译问题--> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> <!--这里是项目jar依赖节点配置--> <dependencies> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.6</version> </dependency> <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.1</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.0.1</version> </dependency> <!--项目需要用到的架包,都依次按此格式写好--> </dependencies></project>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持盛行IT。

 

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: