Zwei unterschiedliche JAR Dateien mit ANT erstellen

Meisenmann

Mitglied
Hi,

ich brauche für meine API eine interne und eine externe Implementierung (JARs). Die API soll gegenseitig austauschbar sein, ohne am Quellcode etwas ändern zu müssen. Beide JARs (intern und extern) müssen also die gleichen Klassen mit unterschiedlichen Implementierungen beinhalten:

api-intern.jar -> A.java (Implementierung intern), B.java (Implementierung intern), ...
api-extern.jar -> A.java (Implementierung extern), B.java (Implementierung extern), ...

Kann ich soetwas mit ANT bewerkstelligen, dass ANT zwei JARs (intern und extern) für mich erstellt?
Ich habs nicht hinbekommen.

Danke und viele Grüße,
Meisenmann
 
Wenn du etwas austauschbar machen willst ohne am Quellecode etwas zu ändern dann solltest du gegen Interfaces Programmieren, die geben Methoden(namen) vor. Die Implementierung dahinter kann dann über eine Config festgelegt werden.
==> Dependency Injection
Damit kann man in Anwendungen ganz leicht Implementierungen gegen andere austauschen.

Ich weiß auch nicht wo das Problem mit ANT liegt ... die hast anscheinend 2 unterschiedliche Projekte.
Also kann man ganz einfach 2 JARs daraus machen (mit den von dir gewünschten Namen).
Was genau hat bei deinen Versuchen denn nicht geklappt?
 
Zuletzt bearbeitet:
Danke für Deine Antwort, Joose.

Die externe JAR darf den Code der internen JAR aus Sicherheitsgründen nicht beinhalten. Deshalb kann ich nicht über eine Konfigurationsdatei gegen Interfaces implementieren. Ich brauche für beide JARs separate Implementierungen meiner Klassen, die jeweils nicht im anderen JAR verfügbar sein darf.

Zu meinem Vorgehen:

Ich habe mein Projekt in zwei Packages (intern und extern) aufgeteilt. Beide Packages enthalten die gleichen Klassen mit unterschiedlichen Implementierungen. Nun möchte ich daraus zwei JARs erzeugen: Inhalt vom Package intern in JAR intern und Inhalt von Package extern in JAR extern.

Das habe ich über die build.xml nicht hinbekommen, weil dann die package-Struktur der Packages unterschiedlich ist.
 
Ich verstehe schon was du mit dem ANT bezwecken willst usw.
Aber was ich nicht verstehe: Du hast anscheinend 2 unterschiedliche Projekte die exakt gleich aufgebaut sind (was Klassen, Methoden und Packages angeht) und sich eben nur in der Implementierung unterscheiden. In was unterscheiden sich der Context? Ist die interen für auch in der Firma und die externe für Kunden?

Die externe JAR darf den Code der internen JAR aus Sicherheitsgründen nicht beinhalten.
Und warum hast du dann beides in einem Projekt? Wenn sich die beiden Implementierungen nicht kennen dürfen teile es doch auf mehrere Projekt auf.
Mach doch ein "Basis" Projekt für alle Gemeinsamkeiten und dann jeweils ein Projekt für die interne Implementierung und ein Projekt für die externe Implementierung. Wenn ich etwas in ein Projekt gebe gehört es auch zusammen!
 
Ist die interen für auch in der Firma und die externe für Kunden?

Die interne ist für mich und die externe für alle anderen. Ich finde es nur praktisch wenn alles in einem Projekt zusammengefasst ist. Ich dachte dass es vielleicht eine Möglichkeit ein neues Package zu erstellen, dort alle Alternativimplementierungen abzulegen und dann mit ANT zwei JARs zu erzeugen.

Aber so wie es aussieht ist das nicht möglich, oder habe ich dich falsch verstanden?
 
Ich wüsste nicht wie habs auch noch nie probiert.
Aber ich sehe auch keinen Grund dazu ich würde einfach die Projekte entsprechend aufsplitten.
Der Vorteil besteht dann auch darin das du den Source Code für die externe Implementierung weitergeben kannst ohne die interne Implementierung weiterzugeben.
 
Ok, danke für deine Hilfe.

Eine kurze Frage habe ich noch: Gibt es eine Möglichkeit in NetBeans 8.0 ein Hauptprojekt (Klassen mit gemeinsamer Implementierung) und zwei Unterprojekte (Klassen mit unterschiedlichen Implementierungen) anzulegen? Ideal wäre es, wenn ich beide Projekte mit einem Knopfdruck builden und kompilieren könnte.

viele Grüße,
Meisenmann
 
Eine kurze Frage habe ich noch: Gibt es eine Möglichkeit in NetBeans 8.0 ein Hauptprojekt (Klassen mit gemeinsamer Implementierung) und zwei Unterprojekte (Klassen mit unterschiedlichen Implementierungen) anzulegen?

Da ich nicht NetBeans sondern Eclipse verwende kann ich hier keine Aussage tätigen
Soweit ich es in Eclipse weiß geht das nicht und braucht man auch nicht.
Einfach 3 Projekte und das Common Projekt mit den gemeinsamen Sachen wird bei den anderen jeweils im BuildPath eingetragen.

Ideal wäre es, wenn ich beide Projekte mit einem Knopfdruck builden und kompilieren könnte.

In Eclipse könnte man dafür dann Maven oder ein einfaches ANT Skript verwenden.

(Analog dazu funktioniert das auch Netbeans, ob Netbeans aber etwas eigenes einfacheres anbietet kann ich dir nicht sagen)
 

Neue Themen


Zurück
Oben