Maven: Как изменить путь к целевому каталогу из командной строки?Maven: Как изменить путь к целевому каталогу из командной строки?
(Я хочу использовать другую целевую директорию, в некоторых случаях)
Maven: Как изменить путь к целевому каталогу из командной строки?Maven: Как изменить путь к целевому каталогу из командной строки?
(Я хочу использовать другую целевую директорию, в некоторых случаях)
Вы должны использовать профили.
<profiles>
<profile>
<id>otherOutputDir</id>
<build>
<directory>yourDirectory</directory>
</build>
</profile>
</profiles>
И начать Maven с вашим профилем
mvn compile -PotherOutputDir
Если вы действительно хотите, чтобы определить свой каталог из командной строки, вы могли бы сделать что-то вроде этого (вовсе не рекомендуется):
<properties>
<buildDirectory>${project.basedir}/target</buildDirectory>
</properties>
<build>
<directory>${buildDirectory}</directory>
</build>
И скомпилируйте следующим образом:
mvn compile -DbuildDirectory=test
Это потому, что вы не можете изменить целевой каталог с помощью -Dproject.build.directory
Большое спасибо. Почему второе решение не рекомендуется? –
@iimuhin, первое решение - правильное использование возможностей, предоставляемых конфигурацией maven, вторая - более трюк, чтобы заставить его работать. Если бы были использованы опции '-Dproject.build.directory', это было бы полезно; и это является обходным путем для проблемы '-Dproject.build.directory'. Плюс с первым решением вы определяете пути раз и навсегда, вы не можете сделать опечатку в имени каталога при запуске командной строки, вы можете легко использовать это решение, даже если вы работаете с IDE и т. Д. –
проблема с решением профилей заключается в том, что многие из вариантов использования целевого каталога зависят от пользователя (например, для сборки на диске) и не принадлежат к pom.Профили в пользовательских параметрах settings.xml не могут содержать элемент сборки, поэтому это не вариант. – EricS
Колина правильно, что профиль должен быть использован. Однако его ответ жестко задает целевой каталог в профиле. Альтернативным решением было бы добавить профиль, как это:
<profile>
<id>alternateBuildDir</id>
<activation>
<property>
<name>alt.build.dir</name>
</property>
</activation>
<build>
<directory>${alt.build.dir}</directory>
</build>
</profile>
Это будет иметь эффект изменения в каталог сборки на то, что дается свойством alt.build.dir, которые могут быть предоставлены в POM , в настройках пользователя или в командной строке. Если этого свойства нет, компиляция произойдет в обычном целевом каталоге.
Извините за вопрос n00b, но каким образом можно установить свойство в файле настроек пользователя, чтобы это было выгодно ? Я понимаю, что из [Настройки] (http://maven.apache.org/settings.html) указано, что свойства, заданные в файле настроек, не будут интерполированы в файле настроек. –
Кроме того, какое преимущество это предложение? Я, вероятно, что-то пропустил, но, предполагая, что «случаи» OP указаны в командной строке, не приведет ли это к тому, что параметр '-Dalt.build.dir = ~/mytarget' эквивалентен использованию' -D' для некоторых другое имущество? –
А, я только что понял, что все здесь говорят о добавлении профилей в POM, а не в settings.xml. Это сделало бы мои вопросы хотя бы как m00t как n00b. Извини за это. –
Мое решение:
в pom.xml:
команда<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<outputDirectory>${dir}</outputDirectory>
</configuration>
</plugin>
в Баш:
mvn package -Ddir="/home/myuser/"
Это не изменяет целевой каталог (project.build.directory). Он просто изменяет директиву вывода для одного плагина. – fnt
Похожий вопрос HTTP: // StackOverflow. ком/вопросы/1317306 3/out-of-tree-build-with-maven-is-it-possible – gavenkoa
Простой ответ: У меня есть IDE, например, построение Eclipse в 'target /', и я хочу, чтобы иметь возможность строить из командной строки, как ну без двух процессов, наступающих друг на друга. –
Другой вариант использования, который я нашел для этого - создание интеграционных тестов, таких как 'src/it/my-integration-test-project/pom.xml' из командной строки, без создания каталога« target »в исходном дереве, будут скопированы, когда тесты интеграции будут выполняться как часть фазы проверки содержащегося проекта. –