Перекомпилируйте Java-класс из Jar - PullRequest
7 голосов
/ 03 июня 2009

У меня есть исполняемый файл jar с одним файлом класса с неправильным значением. Я запросил этот файл у автора и исправил значение.

Теперь я хочу скомпилировать его, добавить скомпилированный файл класса в jar и запустить его.

Не удивительно, что я получаю несколько ошибок «не могу найти символ» для ссылок на пользовательский объект, которые были в файле jar.

Я пытался скомпилировать файл, ссылаясь на файл jar в пути к классам, вот так

C:/> javac  file.java  -classpath C:/folder/where/jar/is

но это, похоже, не работает ... Я получаю те же ошибки, как если бы я просто делал

C:/> javac file.java

Есть ли способ скомпилировать этот отдельный класс, ссылающийся на другие файлы в банке?

Спасибо.


Ошибки, которые я получаю, следуя приведенным ниже советам:

javac -classpath C:/jar/location.jar File.java

File.java:226: cannot find symbol
symbol  : class Stuff
location: class com.shared.stuffers
                              Stuff s1 = new Stuff();
                                             ^

Класс вещи найден в Jar, но не может быть виден программой javac ... Я чувствую, что делаю что-то не так, но не уверен, где? Спасибо.

Ответы [ 6 ]

16 голосов
/ 03 июня 2009

Вы захотите скомпилировать свой файл так:

javac -classpath C:\folder\where\jar\is\the_jar_file.jar file.java

согласно инструкции по использованию javac:

C:\Console2>javac -help
Usage: javac <options> <source files>
9 голосов
/ 03 июня 2009

После того, как вы скомпилировали новый файл (например, в ответе мистера Уилла), вы можете добавить новый файл в банку, используя:

jar uf C:\folder\where\jar\is\the_jar_file.jar file.class
0 голосов
/ 04 июня 2009

Я бы попробовал этот подход (и он должен работать, если класс «отладки» не вносит новую ошибку):

  1. создать новую банку, взяв старую один и удаляя файл класса, который Вы хотите заменить
  2. скомпилировать исправил java файл и убедился что модифицированная банка находится на * 1006 классам *
  3. добавить вновь скомпилированный Классный файл в банку

Это должно работать. Если нет - спросите у автора новую полную библиотеку.

0 голосов
/ 03 июня 2009

Как уже упоминали другие, после перекомпиляции файла .class вам необходимо заменить старую версию в .jar

Вероятно, вам понадобятся все зависимости времени компиляции, чтобы перестроить этот класс. Если это проект с открытым исходным кодом, это может быть легко придумать. Если нет, то это сложнее. Если автор прислал вам файл, он, вероятно, может помочь вам и в этом. Возможно, вы также сможете найти автора для создания исправленного дистрибутива. Скорее всего, он / она уже настроил среду сборки, и это должно быть относительно легко сделать.

0 голосов
/ 03 июня 2009

Я просто догадываюсь, но вы проверили, не нужны ли ему какие-либо внешние библиотеки jar, которые вам, возможно, придется включить в команду компиляции? Еще одна вещь, которую вы можете сделать, это скомпилировать все классы, выполнив что-то вроде

javac *.java ...
0 голосов
/ 03 июня 2009

Вы, вероятно, должны указать сам файл JAR, а не только каталог, в котором он находится.

javac file.java -classpath C:\folder\where\jar\is\the_jar_file.jar
...