prog.jar文件中的prog.java和prog.class-如何轻松更新此代码?

prog.jar文件中的prog.java和prog.class-如何轻松更新此代码?,java,class,jar,Java,Class,Jar,背景故事: 很久以前,在恐龙出现之前,有一个承包商编写了一个小型Java程序,它可以做一些事情,并将一些事情打印到屏幕上 当前:除了我之外,这里没有人对Java了解得太多,而且我也不太流利 这个程序可以运行,但我们需要的只是屏幕上多一点信息。从可用的文档中,我想我知道如何进行这项工作,而且我肯定知道如何打印东西,因为这只是使用System.out.println()实现的 我有一个.jar文件,我99%确定该文件正在加载/使用中,其中包含与其中每个.class文件匹配的.java文件 是否有一种

背景故事:
很久以前,在恐龙出现之前,有一个承包商编写了一个小型Java程序,它可以做一些事情,并将一些事情打印到屏幕上

当前:除了我之外,这里没有人对Java了解得太多,而且我也不太流利

这个程序可以运行,但我们需要的只是屏幕上多一点信息。从可用的文档中,我想我知道如何进行这项工作,而且我肯定知道如何打印东西,因为这只是使用
System.out.println()
实现的

我有一个
.jar
文件,我99%确定该文件正在加载/使用中,其中包含与其中每个
.class
文件匹配的
.java
文件

是否有一种简单的方法(以及如何)稍微修改
.java
文件之一,并“编译”新版本以替换
.jar
中当前匹配的
.class
文件?


当然,我能够打开并读取java源文件,但不记得如何将java转换为“类”文件,尤其不确定是否可以将生成的
.class
文件替换为
.jar
文件

在基本层面上,javac是编译器;这将生成.class文件。还有一个“jar”命令将重新生成jar文件。根据依赖项的数量,这可能会很快变得复杂。您只需键入“javac”和“jar”(不带引号)就可以让args运行它。另一个选项是设置ant构建脚本

因此,您可以执行以下操作(假设使用windows操作系统):

javac-cp%MY\u CLS\u PTH%*.java
其中MY_CLS_PTH是任何依赖类所在的位置。如果你有一个包结构,这会变得更复杂一些

jar-cvf.\my\u class\u dir MyJarFile.jar 其中my_class_dir是包含.class文件的目录

我认为这是正确的(我自己没有运行),但这应该是最基本的

编辑:有一种方法可以将单个.class文件添加/重新添加到现有的jar文件中。查看“jar”命令的用法,看起来“-u”将更新它(当然您必须传入.class文件)。还请记住,这些类中的任何包结构都需要该目录结构,并通过该目录结构引用该类。(希望这是清楚的…

将myclass.class添加到myjar.jar中的顶级目录:

jar uf myjar.jar myclass.class
jar uf myjar.jar -C subdir myclass.class

将myclass.class添加到myjar.jar中的subdir目录:

jar uf myjar.jar myclass.class
jar uf myjar.jar -C subdir myclass.class

在myjar.jar的清单中添加版本属性:

jar uf myjar.jar myclass.class
jar uf myjar.jar -C subdir myclass.class
首先创建一个文件somefile,其中包含行
Version:“X.Y.Z”
,然后

jar umf somefile myjar.jar

除了在我的source.java文件上运行
javac
时可能存在的依赖性问题外,生成的prog.class文件是否可以“放入”现有的jar文件中?请参见上文,因为我刚刚添加了它!我可以建议,如果这是你要做的“很多”,你可以考虑设置在NETBeaS或Eclipse或者为它编写一个Ant脚本。Apache有很多模板脚本,尽管你需要下载ant…Merky,我同意,但这应该是一次性的,直到我能正确设置。我将很快尝试我们的答案。在使用
javac
命令时,我必须将现有的
.jar
文件放在类路径上。在我的例子中,我用7zip打开了
.jar
文件,并简单地用新文件替换了现有的
.class
文件。这很管用。我看到一些注释说,这可以通过
jar
命令来完成,但我想说的是,这种方法对我也很有效。