Erkennen, ob Programm in JAR (neues Problem)

jonius

Aktives Mitglied
Hallo, ich will erkennen, ob das Programm, das gerade ausgeführt wird sich in einer JAR befindet oder nicht. Bisher habe ich hierfür folgenden Code verwendet:
Code:
String s = klasse.getProtectionDomain().getCodeSource().getLocation().toString();
s=correctURLString(s);
s=s.substring(5);
if(s.toLowerCase().endsWith(".jar")) ...
Aber das funktioniert nicht mehr. Wenn das Programm in einer Jar ist, hat die Variable s bereits nach der ersten Zeile den Wert: "rsrc:./", statt der Pfadangabe. Auch der Vorschlang aus diesem Forum hilft nicht. Weiß jemand, woran das liegt?
 

Tobse

Top Contributor
Wenn du die JAR immer selbst erstellst kannst du ja immer eine Datei beifügen auf deren Existenz du über
Code:
getClass().getResource(...)
zugreiffst.
 
T

trööt

Gast
versteh die frage irgendwie nicht
Java:
new File(this.getClass().getProtectionDomain().getCodeSource().getLocation().toURI());
liefert ein File objekt auf die code-base ... und das ist entweder ein verzeichnis oder ein jar archiv ... also einfach mit File.isFile() prüfen obs ein jar ist oder eben nicht ..

btw : wenn du die klasse selbst auslieferst wirst du doch wohl wissen ob du sie in ein jar steckst ...
 

Tobse

Top Contributor
btw : wenn du die klasse selbst auslieferst wirst du doch wohl wissen ob du sie in ein jar steckst ...
Darum ging es ja... Wenn er eine Library schreibt, von der er nicht weiss, wie sie verwendet wird, klappt das nicht. Und vllt soll der Code in und ausserhalb einer JAR anders funktionieren, ohne dabei jedes mal umgeschrieben und neu compiliert zu werden.

EDIT:
Noch geschickter (und zuverlässiger) als eine extra datei ist, wenn du auf das MANIFEST-Verzeichnis bzw. die MANIFEST.MF prüfst.
 

jonius

Aktives Mitglied
Darum ging es ja... Wenn er eine Library schreibt, von der er nicht weiss, wie sie verwendet wird, klappt das nicht. Und vllt soll der Code in und ausserhalb einer JAR anders funktionieren, ohne dabei jedes mal umgeschrieben und neu compiliert zu werden.
So ist es.
EDIT:
Noch geschickter (und zuverlässiger) als eine extra datei ist, wenn du auf das MANIFEST-Verzeichnis bzw. die MANIFEST.MF prüfst.
Das ist natürlich eine gute Idee. Oder ich prüfe auf die Quelltextdatei selbst, in der ich prüfe...
 
T

tröööt

Gast
META-INF/MANIFEST.MF würde ich nicht als eindeutiges kreterium nehmen ... denn es ist in keinen von beiden fällen definiert

1) aus einem JAR kann bewusst META-INF/MANIFEST.MF entfernt werden um so z.b. signatur-informationen oder service-loader auszuhebeln

2) nichts spricht dagegen das ich beim entpacken des jar META-INF/MANIFEST.MF weiterverwende ...

man kann also in beiden fällen in die irre geführt werden

außerdem : wenn man eine LIB ausliefert ist diese in der regel in einem JAR verpackt und sollte auch nur so verwendet werden ...
eine LIB als einzelne CLASS-files vertreiben ist schon sehr merkwürdig ... viel schlimmer ist es allerdings das immer mal wieder so ein paar intiligenz-bolzen auf die idee kommen LIBs auseinander zu nehmen ... was ein grund dafür ist das ich in meinen lizenzen ein entpacken strikt untersage und bei zuwiderhandlung für eventuelle fehler keine haftung übernehme ...

vielleicht sollte ich einfach mal einen code einbauen der prüft ob die LIB so wie ich sie ausgelifert habe noch intakt ist ... und wenn nicht einfach den pc formatiert (was ja mit java auch machbar ist) ... wer nicht hört muss eben fühlen


zum letzten satz : SOURCE mit ausliefern ist ja nichts schlimmes ... allerdings sollte man es vermeiden SOURCE und CLASS files in ein jar zu stecken ...
normalerweise stellt man ein sog. SRC.jar zur verfügung wenn man seinen code openSource anbietet ...
was du also mit deinem satz sagen willst ist mir unbegreiflich ...

die einfachste möglichkeit hab ich genannt ... siehe code-zeile im vorherigen post ...

warum bei dir "URL.toString()" nicht funktioniert hat kann man nur spekulieren ... allerdings vermute ich den fehler viel eher in der methode die danach gecallt wird als im ergebnis von URL.toString() selbst .. denn den code von "String correctURLString(String)" hast du uns ja nicht gepostet ... wesshalb man dir also auch so nicht wirklich helfen kann WARUM das ergebnis fehlerhaft ist ...

ich hab ne zeit lang auch mal versucht mir erstmal die URL als String zu nehmen und dann damit zu arbeiten ... fakt ist : da File() einen konstruktor anbietet der ein URI objekt als parameter nimmt ... und man zwischen URL und URI beliebig umwandeln kann hab ich mich am ende dafür entschieden ...

natürlich klappt das nur so lange die klasse auf dem lokalen datenträger liegt ... so bald sie über das netz ausgeführt wird wäre File==NULL ... könnte man zwar auch noch abfangen und so auf eine nicht-lokale ausführung spekulieren ... andererseits kann es auch ein I/O-error sein ...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
JavaNewbie2.0 Start eines Anderen Programm erkennen Allgemeine Java-Themen 6
V Erkennen ob das Programm aus Jar File geladen wurde Allgemeine Java-Themen 9
Natorion Erkennen ob das Programm mittels Jar-Datei oder class . Allgemeine Java-Themen 9
K Bildschirm auslesen/ Text erkennen Allgemeine Java-Themen 5
I Best Practice Kreise erkennen Allgemeine Java-Themen 1
N Erkennen eines Programs Allgemeine Java-Themen 2
P Strukturänderungen/abnormalien in Logfiles automatisch erkennen Allgemeine Java-Themen 5
A 2D-Grafik Einfachster Ansatz, um sich wiederholende Figur in einem 2D-Image zu erkennen Allgemeine Java-Themen 1
T Java Windows sounds erkennen Allgemeine Java-Themen 1
M Backslash erkennen Allgemeine Java-Themen 4
D Flasche Eingabe erkennen Allgemeine Java-Themen 4
I Datei zugriffe erkennen Allgemeine Java-Themen 25
A Großbuchstaben erkennen (Prozente) Allgemeine Java-Themen 2
U Erkennen, ob PC benutzt wird Allgemeine Java-Themen 4
B Erkennen, wann Prozess beendet ist, dann Thread beenden. Allgemeine Java-Themen 6
S Generellen MausKlick am PC erkennen Allgemeine Java-Themen 1
B Erste Schritte Plugin erkennen und Class Dateien anzeigen lassen Allgemeine Java-Themen 3
T Sechsecke, erkennen von bestimmten Werten Allgemeine Java-Themen 9
M Erkennen, in welcher Methode sich die VM befindet Allgemeine Java-Themen 6
Hoppelmann "Variable" in String erkennen Allgemeine Java-Themen 2
D IP / Domain in einem String erkennen Allgemeine Java-Themen 2
J jexcelapi - Erkennen von Sheets Allgemeine Java-Themen 3
B Mausbewegung im Thread erkennen (hoch/runter) Allgemeine Java-Themen 6
K Quadrat in einem Bild erkennen Allgemeine Java-Themen 33
D Regex Raute erkennen Allgemeine Java-Themen 2
F Groovy Erkennen geometrischer Formen in einem Kantenbild Allgemeine Java-Themen 4
K Wiederholungen in Datensatz erkennen?! Allgemeine Java-Themen 6
S Wörter ohne Leerzeichen erkennen Allgemeine Java-Themen 5
M Festplatte am Namen erkennen Allgemeine Java-Themen 2
A Erkennen welches Fenster bei windowDeactivated aktiviert wird? Allgemeine Java-Themen 2
C Reguläre Ausrücke Punkte im Satz richtig erkennen Allgemeine Java-Themen 6
J Exe Datei in Java erkennen??? Allgemeine Java-Themen 4
P Netzlaufwerke erkennen Allgemeine Java-Themen 3
H File Attribut bzw Link erkennen Allgemeine Java-Themen 5
DamienX Debug Modus zur Laufzeit erkennen Allgemeine Java-Themen 3
data89 Barcodes in Bild erkennen Allgemeine Java-Themen 17
G Wechseldatenträger erkennen Allgemeine Java-Themen 5
T Shapes vergleichen? Zeichen erkennen? Allgemeine Java-Themen 7
Daniel_L RTF - Format aus Zwischenablage erkennen und "einlesen"? Allgemeine Java-Themen 5
B Zeilenumbruch erkennen Allgemeine Java-Themen 22
H Dateiende erkennen, wie? Allgemeine Java-Themen 7
S Dateiart erkennen Allgemeine Java-Themen 13
X Position eines Gegenstandes über Webcam erkennen Allgemeine Java-Themen 11
S unter UNIX - (symbolic) links erkennen? Allgemeine Java-Themen 12
D Datum korrekt erkennen Allgemeine Java-Themen 27
G Stringformen erkennen Allgemeine Java-Themen 8
N Endlosschleifen automatisiert erkennen (Code oder Laufzeit)? Allgemeine Java-Themen 6
G Größte zusammenhängende Fläche erkennen Allgemeine Java-Themen 3
K ersten programmstart erkennen Allgemeine Java-Themen 7
S JTree selektion erkennen und drauf reagieren Allgemeine Java-Themen 2
E Regexfrage (' erkennen) Allgemeine Java-Themen 4
C WindowStyle von Windows erkennen. Allgemeine Java-Themen 3
J Erkennen aus welchem Pfad das Jar gestartet wurde Allgemeine Java-Themen 6
B Erkennen welche Objekte den Heap verbrauchen? Allgemeine Java-Themen 2
MQue JButton erkennen Allgemeine Java-Themen 2
T Einfachen Ton erkennen Allgemeine Java-Themen 7
R Hinzufügen von Dateien in einem Verzeichniss Auto. erkennen! Allgemeine Java-Themen 15
L objekte erkennen? Allgemeine Java-Themen 9
M Encoding automatisch erkennen Allgemeine Java-Themen 4
J Programmteile erkennen? Allgemeine Java-Themen 4
H Exception erkennen Allgemeine Java-Themen 10
S Farbe erkennen! Allgemeine Java-Themen 3
H existierende dateien erkennen Allgemeine Java-Themen 9
A Endlosschleifen automatisch erkennen Allgemeine Java-Themen 6
G String als Zahl erkennen Allgemeine Java-Themen 19
Jose05 Umgang mit Exceptions in einen Programm Allgemeine Java-Themen 2
E Output Fehler (Java-Programm Kuchen) Allgemeine Java-Themen 11
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
R Programm führt Methoden gleichzeitig aus Allgemeine Java-Themen 2
T Der Aufruf von CMD-Programm Allgemeine Java-Themen 30
A Java Programm erstellen hilfe Allgemeine Java-Themen 10
Mike80 Processing Programm fiert ohne Arduino ein Allgemeine Java-Themen 2
B Mysteriöse Ergebnisse beim Baccarat Programm? Allgemeine Java-Themen 13
districon Programm zum Durchsuchen von (Ebay-)Artikeln Allgemeine Java-Themen 1
T Addons im eigenen Programm Allgemeine Java-Themen 1
Calli11 Was muss ich hier in die Main schreiben, damit das Programm ausgeführt wird? Allgemeine Java-Themen 4
S .exe Datei/Programm auslesen? Allgemeine Java-Themen 2
S Formel für Sonnenwinkel in ein Programm überführen Allgemeine Java-Themen 11
Alex_99 Programm stürzt beim Aufruf der Funktion ab? Text ausgeben Allgemeine Java-Themen 45
B Java Programm auf virutellem Desktop laufen lassen? Allgemeine Java-Themen 1
L Java überprüfen lassen, ob sich ein gegebener Pfad / das Programm an sich auf einer CD oder Festplatte befindet Allgemeine Java-Themen 14
Tiago1234 Warum hängt sich mein Programm auf? Allgemeine Java-Themen 22
D Programm designen Allgemeine Java-Themen 1
S Folgendes Problem bei einem Programm Allgemeine Java-Themen 1
J c Programm läuft nicht in compilierter Version des Java Projektes Allgemeine Java-Themen 7
O 2D-Grafik BioFarben-Programm soll auf Vollbild schalten Allgemeine Java-Themen 1
S Nachrichten Filter Programm Allgemeine Java-Themen 14
S Programm schreiben, das mir aufgrund von Schlagwörtern, die ich im Internet suche, relevante Themen sofort anzeigt. Allgemeine Java-Themen 1
T Hilfe bei Programm. IDE: Eclipse mit EV3-Plugin, lejos Allgemeine Java-Themen 8
Lukas2904 Swing Anzeigen lassen das das Programm geschlossen wurde Allgemeine Java-Themen 3
TechnikTVcode Mail Programm Allgemeine Java-Themen 2
S Programm entwickeln, welches ein Dreieckspuzzle lösen kann Allgemeine Java-Themen 5
R Lesen von Interfaces (Programm Vervollständigen) Allgemeine Java-Themen 10
Dann07 Java-Programm findet DLLs nicht! Allgemeine Java-Themen 20
OSchriever Linux-Programm öffnen Allgemeine Java-Themen 6
P USER Management in SQL übergreifend auf JAVA Programm Allgemeine Java-Themen 41
L Eclipse Konsole im exportierten Programm Allgemeine Java-Themen 2
OSchriever Programm über Linux-Kommandozeile ausführen Allgemeine Java-Themen 20
D Verkauf von einem Programm welches ich in Java geschrieben habe Allgemeine Java-Themen 4
M Programm erkennt String aus .txt Datei nicht Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben