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.
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:
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.
target/
, i chcę mieć możliwość budowania z wiersza poleceń również bez dwóch procesów nachodzących na siebie.src/it/my-integration-test-project/pom.xml
z wiersza poleceń, bez tworzeniatarget
katalogu w drzewie źródłowym, który zostanie skopiowany, gdy testy integracyjne zostaną uruchomione w ramach fazy weryfikacji projektu zawierającego.Odpowiedzi:
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
źródło
-Dproject.build.directory
były przeznaczone do użycia, byłoby to użyteczne; i jest to obejście-Dproject.build.directory
problemu. 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.settings.xml
zamiast wiersza poleceń, aby uzyskać jeszcze większą przenośność?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.
źródło
-Dalt.build.dir=~/mytarget
równoważny użyciu-D
dla innej właściwości?