Unterschiedliche Abhängigkeiten für unterschiedliche Build-Profile

115

Ist es möglich, unterschiedliche Abhängigkeiten in einer maven pom.xml-Datei für unterschiedliche Profile zu haben?

z.B

mvn -P debug
mvn -P release

Ich möchte eine andere Abhängigkeits-JAR-Datei in einem Profil mit denselben Klassennamen und unterschiedlichen Implementierungen derselben Schnittstellen abrufen.

izb
quelle
Dies kann verwendet werden, wenn auf verschiedene Webserver abgezielt wird. Zum Beispiel beim Erstellen für einen JavaEE 5-Server, der Bibliotheken wie JAXB bietet, die Sie nicht in Ihre War-Datei aufnehmen sollten, im Gegensatz zum Erstellen für einen JavaEE 1.4-Server, bei dem Sie das JAXB-JAR einschließen sollten.
Leonel

Antworten:

174

Um die Maven-Dokumentation dazu zu zitieren :

Ein Profilelement enthält sowohl eine optionale Aktivierung (einen Profilauslöser) als auch die Änderungen, die am POM vorgenommen werden müssen, wenn dieses Profil aktiviert wurde. Beispielsweise kann ein für eine Testumgebung erstelltes Projekt auf eine andere Datenbank verweisen als die endgültige Bereitstellung. Abhängig von der verwendeten JDK-Version können Abhängigkeiten aus verschiedenen Repositorys abgerufen werden .

(Der Schwerpunkt liegt bei mir)

Fügen Sie einfach die Abhängigkeit für das releaseProfil in die Profildeklaration selbst ein und machen Sie dasselbe für debug.

<Profile>
    <Profil>
        <id> debug </ id>
        …
        <Abhängigkeiten>
            <Abhängigkeit>… </ Abhängigkeit>
        </ Abhängigkeiten>
        …
    </ profile>
    <Profil>
        <id> release </ id>
        …
        <Abhängigkeiten>
            <Abhängigkeit>… </ Abhängigkeit>
        </ Abhängigkeiten>
        …
    </ profile>
</ profile>
Aleksandar Dimitrov
quelle
2
Diese Methode führt dazu, dass der Code im Bearbeitungsmodus nicht aufgelöst wird. Wenn das Debuggen aktiv ist, fehlt das Abhängigkeitsglas der Version, und der Code ist fehlerhaft. Wie kann ich das Problem beheben?
Brucenan
6
Sie können den Bereich der release-spezifischen Abhängigkeit in der Abhängigkeitshierarchie als "bereitgestellt" festlegen und den Bereich im Abschnitt "Release-Profil" auf "kompilieren" zurücksetzen. Damit ist die Abhängigkeit für die Kompilierung verfügbar, jedoch nicht im letzten Krieg für das 'Debug'-Profil.
Donnerstag,
@uday Wenn Sie eine Antwort geben würden, die diesen Ansatz zeigt, würde ich ihn gerne verbessern
javadba
IMHO-Profile sind zumindest für Abhängigkeiten nutzlos: IDEs geben Fehler aus, Abhängigkeiten werden nicht mehr aufgelöst, Anwendungen funktionieren am Ende nicht. Ich hatte mehr erwartet.
Ares
6

Ihre groupId, artefaktId sollte in Ihren Profilen als Eigenschaften getoken werden, und Sie können Ihre Abhängigkeiten in den generischen Abschnitt verschieben.


quelle
2
Dies wäre nur dann der Fall, wenn Sie 1 Abhängigkeit haben. Wenn sich die Anzahl der Abhängigkeiten zwischen Debug und Release unterscheidet, funktioniert das Tokenisieren nicht. In diesem Fall würde ich empfehlen, die Deps im Profilabschnitt nicht zu tokenisieren und explizit zu definieren.
Marcel Overdijk
Die andere Antwort hat bei mir nicht funktioniert, da die Standardprofilabhängigkeiten zusammen mit anderen spezifischen Profilabhängigkeiten weiterhin enthalten waren. Ihre Antwort hat gut funktioniert.
Vlad Mihalcea
@Vlad Haben Sie die Abhängigkeit aus dem Hauptteil des POM entfernt? Sonst hast du es zweimal. (Siehe stackoverflow.com/q/24855678/6944068, wie Sie sicherstellen können, dass immer ein Profil aktiv ist.)
Toolforger