124

私はちょうど Maven を学んでいるので、これは明らかかもしれませんが、特定のプロジェクトの Maven ライフサイクル フェーズごとに関連付けられた目標を簡単にリストする方法が見つかりません。

Maven のデフォルトのライフ サイクル フェーズと対応するデフォルトの目標がここに文書化されていることがわかりました。これまでの私の理解では、各 pom.xml が追加の目標を各ライフサイクル フェーズにバインドできるということです。

では、特定のプロジェクトの各ライフサイクル フェーズで実行される目標を決定する mvn コマンドはありますか? そうでない場合は、新しいmavenプロジェクトごとにpom.xmlを調べて、これを理解する必要があると思いますか?

4

5 に答える 5

135

mvn help:describe -Dcmd=compile(またはその他の有効なフェーズ)

于 2010-01-14T17:31:09.040 に答える
19

役立つツールの 1 つはmvn help:effective-pom、すべての変数とすべての親 POM が展開された状態で POM を出力することです。これは、Maven が見ているものを理解するのに役立ちます。そこから、すべての追加の目標 (通常はそれほど多くはありません) を見つけるのは非常に簡単です。

より大きな問題は、暗黙の目標です (つまり、プラグインがライフサイクルのいくつかのフェーズに自動的にフックする場合)。実際に Maven を実行しないと、これらを確認する簡単な方法はありません。これは Maven 3 で改善されるはずです。それまでは、Maven を実行し-Xて、大量のデバッグ出力と現在のフェーズおよび実行されているプラ​​グインを出力します。

于 2009-11-10T17:24:14.933 に答える
2

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レベルで解決しようとしています。

于 2015-07-17T04:43:20.793 に答える