Maven: Jak zmienić ścieżkę do katalogu docelowego z wiersza poleceń?


82

Maven: Jak zmienić ścieżkę do katalogu docelowego z wiersza poleceń?

(W niektórych przypadkach chcę użyć innego katalogu docelowego)



2
Prosta odpowiedź: mam IDE, takie jak Eclipse, które wbudowuje się w target/, i chcę mieć możliwość budowania z wiersza poleceń również bez dwóch procesów nachodzących na siebie.
— john sullivan,

Inny przypadek użycia, który znalazłem w tym przypadku - budowanie testów integracyjnych, takich jak src/it/my-integration-test-project/pom.xmlz wiersza poleceń, bez tworzenia targetkatalogu w drzewie źródłowym, który zostanie skopiowany, gdy testy integracyjne zostaną uruchomione w ramach fazy weryfikacji projektu zawierającego.
— Mike Samuel

1
Czy to odpowiada na twoje pytanie? Kompilacja poza drzewem z mavenem. Czy to możliwe?
— 030

Odpowiedzi:


93

Powinieneś używać profili.

<profiles>
    <profile>
        <id>otherOutputDir</id>
        <build>
            <directory>yourDirectory</directory>
        </build>
    </profile>
</profiles>

I zacznij od swojego profilu

mvn compile -PotherOutputDir

Jeśli naprawdę chcesz zdefiniować swój katalog z wiersza poleceń, możesz zrobić coś takiego ( w ogóle NIE zalecane ):

<properties>
    <buildDirectory>${project.basedir}/target</buildDirectory>
</properties>

<build>
    <directory>${buildDirectory}</directory>
</build>

I skompiluj w ten sposób:

mvn compile -DbuildDirectory=test

Dzieje się tak, ponieważ nie możesz zmienić katalogu docelowego za pomocą -Dproject.build.directory


1
Dziękuję Ci bardzo. Dlaczego drugie rozwiązanie nie jest zalecane?
— Igor Mukhin

1
@iimuhin, pierwsze rozwiązanie to poprawne wykorzystanie możliwości jakie daje konfiguracja mavena, drugie to raczej trik, aby to zadziałało. Gdyby opcje -Dproject.build.directorybyły przeznaczone do użycia, byłoby to użyteczne; i jest to obejście -Dproject.build.directoryproblemu. Dodatkowo w pierwszym rozwiązaniu określasz ścieżki raz na zawsze, nie możesz popełnić literówki w nazwie katalogu po uruchomieniu wiersza poleceń, możesz z łatwością skorzystać z tego rozwiązania, nawet jeśli pracujesz z IDE itp.
— Colin Hebert,

8
Problem z rozwiązaniem profili polega na tym, że wiele przypadków użycia zmiany katalogu docelowego jest specyficznych dla użytkownika (np. Chęć kompilacji na dysk RAM) i nie należy do pliku pom. Profile w pliku settings.xml specyficznym dla użytkownika nie mogą zawierać elementu kompilacji, więc nie jest to opcja.
— EricS

Uwielbiam tę odpowiedź, ale może dodam, że możesz aktywować profil za pomocą settings.xmlzamiast wiersza poleceń, aby uzyskać jeszcze większą przenośność?
— Rogue 05

1
Podoba mi się twoje „niezalecane rozwiązanie”, ponieważ umożliwiło mi budowanie w wierszu poleceń w alternatywnych katalogach, bez zakłócania pracy Eclipse, które wskazuje na domyślny $ {project.basedir} / target. Dlatego mogę kodować w Eclipse, jednocześnie budując w wierszu poleceń, bez czekania, aż Eclipse odświeży / przebuduje
— Francois Marot

28

Colin ma rację, że należy użyć profilu. Jednak jego odpowiedź na stałe koduje katalog docelowy w profilu. Alternatywnym rozwiązaniem byłoby dodanie takiego profilu:

    <profile>
        <id>alternateBuildDir</id>
        <activation>
            <property>
                <name>alt.build.dir</name>
            </property>
        </activation>
        <build>
            <directory>${alt.build.dir}</directory>
        </build>
    </profile>

Spowodowałoby to zmianę katalogu budowania na taki, jaki podaje własność alt.build.dir, którą można podać w POM, w ustawieniach użytkownika lub w wierszu poleceń. Jeśli właściwość nie jest obecna, kompilacja odbędzie się w normalnym katalogu docelowym.


Przepraszam za pytanie n00b, ale jaki jest właściwy sposób ustawienia właściwości w pliku ustawień użytkownika, aby było to korzystne? Rozumiem na podstawie odniesienia do ustawień , że właściwości ustawione w pliku ustawień nie będą interpolowane w pliku ustawień.
— Michael Scheper

Jakie korzyści przyniosłoby to również? Prawdopodobnie czegoś mi brakuje, ale zakładając, że `` przypadki '' OP są określone w wierszu poleceń, czy nie spowodowałoby to, że parametr byłby -Dalt.build.dir=~/mytargetrównoważny użyciu -Ddla innej właściwości?
— Michael Scheper

Ach, właśnie zdałem sobie sprawę, że wszyscy tutaj mówią o dodawaniu profili do POM, a nie o settings.xml. To sprawiłoby, że moje pytania byłyby co najmniej równe m00t jak n00b. Przepraszam za to.
— Michael Scheper
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.