Ответ 1
mvn help:describe -Dcmd=compile
(или любая другая действительная фаза)
Я просто изучаю Maven, и поэтому это может быть очевидным, но я не могу найти простой способ перечислить цели, связанные для каждого этапа жизненного цикла maven для данного проекта.
Я видел, что фазы жизненного цикла по умолчанию Maven и соответствующие цели по умолчанию документированы здесь. До сих пор я понимаю, что каждый pom.xml может привязывать дополнительные цели к каждой фазе жизненного цикла.
Итак, существует ли команда mvn для определения целей, которые будут выполняться для каждой фазы жизненного цикла для данного проекта? Если нет, я думаю, мне просто нужно просмотреть pom.xml для каждого нового проекта maven, чтобы понять это?
mvn help:describe -Dcmd=compile
(или любая другая действительная фаза)
buildplan-maven-plugin
- отличный инструмент для демонстрации того, как цели связаны с этапами.
Ниже приведены примеры команд, которые вы можете запустить. Команды будут автоматически загружать и устанавливать плагин, если он еще не установлен.
> mvn fr.jcgay.maven.plugins:buildplan-maven-plugin:list
PLUGIN | PHASE | ID | GOAL
--------------------------------------------------------------------------------------------
maven-enforcer-plugin | validate | default | enforce
maven-dependency-plugin | process-sources | default | copy-dependencies
maven-resources-plugin | process-resources | default-resources | resources
maven-compiler-plugin | compile | default-compile | compile
maven-resources-plugin | process-test-resources | default-testResources | testResources
maven-compiler-plugin | test-compile | default-testCompile | testCompile
maven-surefire-plugin | test | default-test | test
maven-jar-plugin | package | default-jar | jar
maven-assembly-plugin | package | make-assembly | single
maven-install-plugin | install | default-install | install
maven-deploy-plugin | deploy | default-deploy | deploy
> mvn fr.jcgay.maven.plugins:buildplan-maven-plugin:list-phase
validate -----------------------------------------------------------------
+ maven-enforcer-plugin | default | enforce
process-sources ----------------------------------------------------------
+ maven-dependency-plugin | default | copy-dependencies
process-resources --------------------------------------------------------
+ maven-resources-plugin | default-resources | resources
compile ------------------------------------------------------------------
+ maven-compiler-plugin | default-compile | compile
process-test-resources ---------------------------------------------------
+ maven-resources-plugin | default-testResources | testResources
test-compile -------------------------------------------------------------
+ maven-compiler-plugin | default-testCompile | testCompile
test ---------------------------------------------------------------------
+ maven-surefire-plugin | default-test | test
package ------------------------------------------------------------------
+ maven-jar-plugin | default-jar | jar
+ maven-assembly-plugin | make-assembly | single
install ------------------------------------------------------------------
+ maven-install-plugin | default-install | install
deploy -------------------------------------------------------------------
+ maven-deploy-plugin | default-deploy | deploy
> mvn fr.jcgay.maven.plugins:buildplan-maven-plugin:list-plugin
maven-enforcer-plugin ---------------------------------------------------
+ validate | default | enforce
maven-dependency-plugin -------------------------------------------------
+ process-sources | default | copy-dependencies
maven-resources-plugin --------------------------------------------------
+ process-resources | default-resources | resources
+ process-test-resources | default-testResources | testResources
maven-compiler-plugin ---------------------------------------------------
+ compile | default-compile | compile
+ test-compile | default-testCompile | testCompile
maven-surefire-plugin ---------------------------------------------------
+ test | default-test | test
maven-jar-plugin --------------------------------------------------------
+ package | default-jar | jar
maven-assembly-plugin ---------------------------------------------------
+ package | make-assembly | single
maven-install-plugin ----------------------------------------------------
+ install | default-install | install
maven-deploy-plugin -----------------------------------------------------
+ deploy | default-deploy | deploy
По умолчанию, поиск целей для задач, которые будут выполняться, если пользователь вызывает mvn deploy
. Фазы, такие как clean
, не будут включены. Чтобы включить в поиск несколько фаз, используйте свойство buildplan.tasks
:
> mvn fr.jcgay.maven.plugins:buildplan-maven-plugin:list -Dbuildplan.tasks=clean,deploy
Один инструмент, который помогает, - это mvn help:effective-pom
Он будет печатать POM со всеми переменными и все родительские POM-расширения. Это помогает понять, что видит Maven. Из этого довольно легко найти все дополнительные цели (которых обычно не так много).
Большей проблемой являются неявные цели (например, когда плагин автоматически подключается к некоторым этапам жизненного цикла). Нет простого способа увидеть их без фактического запуска Maven. Это должно стать лучше в Maven 3. До тех пор, запустите Maven с помощью -X
, который будет печатать много отладочного вывода плюс текущую фазу и какие плагины выполняются.
Если вы не используете Maven, но используете m2e, вы можете сделать это, используя блок кода, который вы можете использовать в плагине Eclipse:
final IMavenProjectRegistry projectRegistry = MavenPlugin.getMavenProjectRegistry();
final IMavenProjectFacade facade = projectRegistry.getProject(project);
projectRegistry.execute(facade, new ICallable<Void>() {
public Void call(IMavenExecutionContext context, IProgressMonitor monitor) throws CoreException {
MavenProject mavenProject = facade.getMavenProject(monitor);
List<MojoExecution> mojoExecutions = ((MavenProjectFacade) facade).getMojoExecutions(monitor);
LifecycleMappingResult mappingResult = LifecycleMappingFactory.calculateLifecycleMapping(
mavenProject, mojoExecutions, facade.getResolverConfiguration().getLifecycleMappingId(),
monitor);
Map<MojoExecutionKey, List<IPluginExecutionMetadata>> mojoExecutionMapping = mappingResult
.getMojoExecutionMapping();
Map<String, List<MojoExecutionKey>> phases = new LinkedHashMap<String, List<MojoExecutionKey>>();
for (MojoExecutionKey execution : mojoExecutionMapping.keySet()) {
List<MojoExecutionKey> executions = phases.get(execution.getLifecyclePhase());
if (executions == null) {
executions = new ArrayList<MojoExecutionKey>();
phases.put(execution.getLifecyclePhase(), executions);
}
executions.add(execution);
}
Посмотрите на полный .
Уже реализовано в:
http://marketplace.eclipse.org/content/phases-and-goals
Он использует способность m2e для вычисления объединения целей с фазами. Я также пытаюсь решить это на уровне maven.