首先是官方说法:
-classpath:
设置用户类路径,它将覆盖 CLASSPATH
环境变量中的用户类路径。若既未指定 CLASSPATH
又未指定 -classpath
,则用户类路径由当前目录构成。
-sourcepath:
指定用以查找类或接口定义的源代码路径。与用户类路径一样,源路径项用分号 (;
)
进行分隔,它们可以是目录、JAR 归档文件或 ZIP 归档文件。如果使用包,那么目录或归档文件中的本地路径名必须反映包名。
注意:通过类路径查找的类,如果找到了其源文件,则可能会自动被重新编译。
官方说法很简洁,但是具体操作起来总觉得不太清晰,我们还是找几个例子,来具体分析一下:
具体例子:
假设我们有如下的目录结构:
src-|
|-foo-|
|-Testfoo.java
|-baz-|
|-Testbaz.java
classes-|
其中Testfoo.java:
package foo;
public class Testfoo {
//....
}
其中Testbaz.java:
package baz;
import foo.Testfoo;
public class Testbaz {
//...
}
也就是说Testbaz对Testfoo有引用。
我们目标是把Testbaz编译到目录classes里面,试用如下的命令:
javac -d classes src\baz\Testbaz.java
命令失败,因为找不到它依赖的Testfoo。我们可以用以下三种方式来实现:
1.我们最容易考虑到的就是编译被依赖的Testfoo类,并将其加入Testbaz的CLASSPATH
javac -d classes src\foo\Testfoo.java
javac -d classes -classpath classes src\baz\Testbaz.java
第二行使用了-classpath,使得编译器在寻找Testfoo类的时候以classes为根目录,根据根目录和package名,类名最终定
位了需要用的(已编译出来的)Testfoo类。
2.在编译Testbaz的时候把被依赖的Testfoo类加入SOURCEPATH
javac -d classes -sourcepath src src\baz\Testbaz.java
在编译条件里面加入-verbose可以很清楚的看到,编译器在寻找Testfoo类的时候,以src为根目录,根据根目录和package名,类
名最终定位了需要用的(源代码)Testfoo类。
3.把CLASSPATH和SOURCEPATH两者都加进来
javac -d classes src\foo\Testfoo.java
javac -d classes -sourcepath src -classpath classes
src\baz\Testbaz.java
两个属性都被加入,编译器首先会判断Testfoo.class和Testfoo.java是否同时存在。如果单独存在,则适应于以上的方法之一。
如果同时存在,则判断.class是否是.java的最新编译,如果有差异,则重新编译.java来覆盖.class
有必要补充一下-d参数:
-d参数是很好的把源程序和目标代码分离的参数。-d制定的是目标代码的根目录,源文件的包的结构将以目录形式反映到根目录上。美中不足的是-d需
要指定已经存在的目录,不能自动创建。
分享到:
相关推荐
JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA...
Java编译软件大全是针对Java源代码进行反编译的一系列工具集合,这些工具在软件开发、代码分析、逆向工程等领域中有着广泛的应用。在Java编程中,源代码通常是不可见的,因为它们被编译成字节码(.class文件),而...
Java反编译工具是程序员在开发和调试过程中经常会用到的一种实用软件,它能够将已编译的Java字节码(.class文件)转换回源代码格式,这对于查看和理解第三方库或者研究已有的二进制代码非常有帮助。本绿色版的Java反...
Java反编译工具是开发者用来查看Java字节码(.class文件)源代码的一种实用...此外,由于版权问题,商业用途的反编译通常需要得到原始代码所有者的许可。因此,如描述中所强调的,这些工具主要应被用于学习和教育目的。
标题“JAVA反编译和unicode转字符.rar”表明这个压缩包包含了一套Java反编译工具Jad.exe和相关的使用手册,以及一个用于将反编译后汉字Unicode格式转换为可读字符格式的代码。Jad是Java反编译器的代表之一,它能够将...
Java反编译是将已编译的字节码(.class文件)转换回源代码(.java文件)的过程。在开发或维护项目时,如果原始的源代码丢失或不可用,反编译工具就能派上用场。这些工具可以帮助开发者理解代码的功能,修复错误,...
Java反编译exe主要指的是将Java的字节码(.class文件)转换回源代码(.java文件)的过程。在Java编程中,源代码被编译成字节码,然后由JVM(Java虚拟机)执行。然而,出于调试、学习或者逆向工程的目的,有时我们...
将Android 的Dex文件转换为smali文件。此工具是用来将Java代码编译后的class文件 再由Android SDK的dx.jar生成dex文件之后。将dex转换为Smali文件的工具.供代码对比学习。
Java反编译是Java开发中一个重要的辅助工具,它能够帮助开发者查看已编译的`.class`文件中的源代码,即使原始的`.java`源文件已经丢失或未被提供。这个过程对于理解类库的工作原理、逆向工程、调试、学习或者分析...
总的来说,JD-GUI作为一款强大的Java反编译工具,为开发者提供了一种有效的方式来探索和学习已编译的Java代码,帮助他们解决问题、提高代码理解力,从而提升开发效率。无论你是初学者还是经验丰富的开发者,JD-GUI都...
使用Java反编译软件需要注意版权问题,因为不是所有的软件都允许进行反编译。在商业环境中,未经许可的反编译可能导致侵犯他人的知识产权。因此,在实际操作前,确保你有权访问并反编译目标代码。 总的来说,Java反...
Java反编译是将已编译的Java字节码(.class文件)转换回源代码(.java文件)的过程,这对于理解已加密或混淆的代码、逆向...同时,保持对Java反编译原理的理解,有助于更有效地利用这样的工具,解决实际开发中的问题。
### Java反编译工具:将.class文件转换为.java文件 #### 概述 在软件开发领域,有时我们可能需要分析第三方库或者开源项目的内部结构,这时就需要借助于反编译工具来帮助我们阅读和理解其源码。Java作为一种广泛...
JavaCompiler --JDK6 API 的简介(java动态编译) JavaCompiler 是 Java 中的一个编译器接口,提供了编译 Java 源代码的功能。在 Java SE6 中,JavaCompiler 接口是 javax.tools 包的一部分,提供了标准的方式来...
本文将详细介绍如何解决JAVA反编译文件时的中文乱码问题。 首先,理解问题的根源:Java源代码默认采用UTF-8编码,但某些情况下,源代码可能使用了其他编码方式,如GBK。当这些源代码被编译成字节码后,再用不支持...
标题“java编译class文件”涉及的核心知识点是Java的编译过程。Java源代码文件的扩展名为`.java`,这些文件包含类定义、方法定义以及其他Java语法元素。要将`.java`文件编译成`.class`文件,我们需要使用Java的JDK...
jad 是应用最广泛的java 反编译工具;其本身是命令行工具;其他很多用具是在jad内核的基础上加了一个图形界面;比如我上传的资源、Cavaj Java Decompiler 以下假设jad.exe在c:\java目录下 一、基本用法 ...
- **版权问题**:在未经许可的情况下反编译他人的代码可能涉及法律风险,必须遵守相关的版权法规。 5. **反编译流程** - 选择合适的反编译工具。 - 使用工具读取或导入待反编译的.class文件。 - 工具解析字节码...