- 52
- 0
问题描述
我下载了一个对方的Jar程序,可以正常运行,但是我想修改程序里面的一些内容,比如其程序中有一个函数
public void setNumTarget(final long numTarget) {
this.numTarget = numTarget;
}
我想让其变成类似这样的(当然这只是其中一处想要修改的地方,还有几处稍微复杂点的)
public void setNumTarget(final long numTarget) {
if (numTarget > 5000) {
this.numTarget = numTarget;
} else {
this.numTarget = numTarget * 1000;
}
}
现在我用luyten-0.5.4.exe 这个软件,将.class反编译成 .java文件后,按照我的要求修改了文件,再想调用javac xx.java 来编译成 .class文件时,提示一堆的错误,我看主要的原因是因为缺少其他的包.比如xx.java的内容如下:
package brs;
import javax.persistence.*;
import java.math.*;
import java.util.concurrent.atomic.*;
import brs.peer.*;
import brs.crypto.*;
import com.google.gson.*;
import brs.util.*;
import java.util.*;
import java.nio.*;
import org.slf4j.*;
......
问题出现的环境背景及自己尝试过哪些方法
比如其中的 import javax.persistence.*; 我知道是缺少jar包,我从网上下载了jar包,来一起编译,就没问题了,
但是其他的比如 import brs.peer.*; 这种引用的他自己内部的包,我没有这个jar文件. 和源码一起的只有对应的.class 文件,没有jar文件, 而且我看.class的名称,也能完全对应上
这种 我该怎么才能一起编译啊,求教!
相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)
我目前的编译代码:
C:UsersAdministratorDesktopjava>javac -cp ejb3-persistence.jar;gson-1.7.jar
Block.java
你期待的结果是什么?实际看到的错误信息又是什么?
能够告知我如何处理这种编译呢,谢谢. 我基础有点差,如果能稍微详细点,不胜感激
报错类似如下内容:
Block.java:53: 错误: 找不到符号
private TransactionDb transactionDb() {
^
符号: 类 TransactionDb
位置: 类 Block
Logger.java:21: 错误: 找不到符号
boolean isTraceEnabled(final Marker p0);
^
符号: 类 Marker
位置: 接口 Logger
Logger.java:23: 错误: 找不到符号
void trace(final Marker p0, final String p1);
^
符号: 类 Marker
位置: 接口 Logger
Logger.java:25: 错误: 找不到符号
void trace(final Marker p0, final String p1, final Object p2);
- 共 0 条
- 全部回答
-
瞳孔浮华忧伤 普通会员 1楼
在Java中,反编译和编译成class文件通常涉及以下步骤:
- 反编译:
- 使用Java的反编译工具,如java -jar 或 gradle compileJava,运行以下命令:
bash java -jar your_jar_file.jar --source-path /path/to/your/source/java-files --target-path /path/to/your/target/java-files -
在运行的命令中,
-source-path和-target-path参数指定源文件和目标文件的路径,即反编译的目标文件路径。 -
在反编译的Java代码中,可能会使用
import语句导入所需包,例如: ```java import java.io.*; import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in);
System.out.println("Enter the name of the file to be compiled:"); String fileName = scanner.nextLine(); try { File inputFile = new File(fileName); File outputFile = new File(fileName + ".class"); // 引入包,如:java.util System.out.println("导入包:java.util"); // 将源文件反编译为字节码 byte[] bytecode = Files.readAllBytes(inputFile.toPath()); byte[] classes =反编译(bytecode); // 将字节码反编译为目标文件 byte[] classesFile = Files.write(outputFile.toPath(), classes); System.out.println("Source file " + fileName + " has been compiled to target file " + fileName + ".class"); } catch (FileNotFoundException e) { System.out.println("Error: " + e.getMessage()); } catch (IOException e) { System.out.println("Error: " + e.getMessage()); } } // 将字节码反编译为目标文件 public static byte[]反编译(byte[] bytecode) throws IOException { byte[] classes = new byte[bytecode.length]; // 调用反编译器的API进行字节码反编译 ClassReader reader = new ClassReader(bytecode); ClassWriter writer = new ClassWriter(classes, ClassWriter.COMPUTE_FRAMES); // 创建反编译器对象 Field[] fields = reader.getFields(); for (Field field : fields) { if (!field.isStatic()) { writer.writeField(field.getName(), field.getType(), field.get初始值()); } } // 将反编译后的字节码反编译为类文件 writer.close(); return classes; }} ```
-
编译成class文件:
- 使用Java的编译器,如javac或 gradle compileJava,运行以下命令:
bash javac -source-path /path/to/your/source/java-files --target-path /path/to/your/target/java-files Main.java -
在运行的命令中,
-source-path和-target-path参数指定源文件和目标文件的路径,即编译的目标文件路径。 -
编译Java代码到class文件,生成class文件的名称与源文件相同但扩展名为.class的文件。
-
在编译过程中,编译器可能会警告你缺少某些包或依赖项。例如,在上述例子中,Java编译器可能会提示你缺少
java.util和java.io包。 -
解决这个问题的方法是通过以下步骤:
a. 添加所需的包和依赖项: - 在你的项目根目录下,添加以下依赖项: ```xml
org.apache.commons commons-lang3 3.8.1 commons-io commons-io 2.11.0 org.apache.commons commons-collections4 4.11.0 org.apache.commons commons-beanutils 5.4.1 org.apache.commons commons-text 3.2.1 org.apache.commons commons-lang3-jdk8 3.8.1 org.apache.commons commons-lang3 3.7.0 org.apache.commons commons-collections4-jdk8 4.11.0 org.apache.commons commons-text-jsr310 1.1.1 org.apache.commons commons-lang3-compat 3.8.1 org.apache.commons commons-lang3-swing 3.8.1 org.apache.commons commons-lang3-beans 3.8.1 org.apache.commons commons-lang3-collections 3.8.1 org.apache.commons commons-beanutils-core 5.4.1 org.apache.commons commons-beanutils-extras 5.4.1 org.apache.commons commons-beanutils-jdk8 3.8.1 org.apache.commons commons-beanutils 5.4.1 jdk8 org.apache.commons commons-text-jsr310-api 1.1.1 org.apache.commons commons-lang3-compat 3.8.1 jdk8 org.apache.commons commons-lang3-swing 3.8.1 jdk8 org.apache.commons commons-lang3-beans 3.8.1 jdk8 org.apache.commons commons-lang3-collections 3.8.1 jdk8 org.apache.commons commons-beanutils-core 5.4.1 jdk8 javassist org.apache.commons commons-beanutils-exts 5.4.1 jdk8 org.apache.commons commons-beanutils-jdk8 3.8.1 jdk8 compiler-jdk8 org.apache.commons commons-lang3 <version
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

