2009-06-03 12 views
6

Mam plik wykonywalny, który ma jeden plik klasy z nieprawidłową wartością. Zażądałem tego pliku od autora i poprawiłem wartość.Ponownie skompiluj klasę Java ze słownika

Teraz chcę go skompilować i dodać skompilowany plik klasy do słoika i uruchomić go.

Nic dziwnego, że otrzymuję wiele błędów "nie mogę znaleźć symbolu" dla odniesień do niestandardowego obiektu, które znajdowały się w pliku jar.

Próbowałem skompilować plik poprzez odwołanie do pliku jar w ścieżce klasy jak tak

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

ale to nie robi wydaje się działać ... mam te same błędy, jakby po prostu robi

 
C:/> javac file.java 

Czy istnieje sposób, aby skompilować tę indywidualną klasę, odwołując się do innych plików w słoiku?

Dzięki.


Błędy Dostaję natomiast po niektóre z propozycji poniżej tutaj:

 
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(); 
              ^

klasa rzeczy jest znalezione w słoiku, ale nie może być postrzegana przez program javac ... czuję się jak Robię coś złego, ale nie wiem gdzie? Dzięki.

+1

buszmen, ty hacker! Który autor dałby ci kod źródłowy, zamiast kompilować wszystko dla ciebie? – Cheeso

+0

Cheeso, aby odpowiedzieć ur Q? - autor, który chce, aby jego kod pod chirurgią -> ale jestem daleko od hakera, nie przeszkadza mu hakowanie –

Odpowiedz

0

Prawdopodobnie trzeba określić samego pliku JAR, a nie tylko katalog, to rezyduje w

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

hmm ... nie wydaje się, że to naprawia ... błędy wciąż tam są? –

+1

Whoops, zła kolejność. Niniejszym polecam odpowiedź Pana Willa. –

16

Będziemy chcieli, aby skompilować plik tak:.

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

za wykorzystaniem javac instrukcje:

C:\Console2>javac -help 
Usage: javac <options> <source files> 
+0

Dzięki za sugestię --- ale problem pozostaje :( –

+2

Brak katalogu podstawowego (.) Polecenie powinno być javac -classpath.; C: \ folder \ gdzie \ jar \ is \ the_jar_file.jar file.java – mjn

0

Po prostu zgaduję, ale czy sprawdziłeś, czy nie potrzebuje żadnego zewnętrznego j ar biblioteki, które być może będziesz musiał dołączyć do polecenia kompilacji? Inną rzeczą, jaką można zrobić, to skompilować wszystkie klasy robiąc coś podobnego

javac *.java ... 
9

Po sporządziła nowy plik (tak jak w odpowiedzi pana Willa), można dodać nowy plik do słoika przy użyciu:

jar uf C:\folder\where\jar\is\the_jar_file.jar file.class 
+0

ty zobaczyłem, że nadchodzi :) – Manav

0

Jak wspominają inni, skoro masz plik .class zrekompilowane trzeba zastąpić starszą wersję w JAR

będziesz prawdopodobnie trzeba mieć żadnych zależności czasu kompilacji dostępne odbuduj tę klasę. Jeśli jest to projekt open source, może to być łatwe. Jeśli nie, to jest trudniejsze. Jeśli autor przysłał ci plik, prawdopodobnie może ci w tym pomóc. Być może uda Ci się również przekonać autora, aby przygotował dla ciebie również łatkę dystrybucji. Szanse są już ustalone, a to powinno być stosunkowo łatwe.

0

Chciałbym spróbować tego podejścia (i to powinno działać, chyba że klasa „debugowany” nie wprowadza nowego błędu):

  1. utworzyć nowy słoik biorąc starą jedno i usuwanie classfile tym chcesz zastąpić
  2. skompilować poprawiony plik java i upewnij się, że zmodyfikowany słoik jest na ścieżce klasy
  3. dodać nowo skompilowane classfile do słoika

To powinno zadziałać. Jeśli nie, poproś autora o nową kompletną bibliotekę.