3

はい、しましたmvn clean

Maven 3.1.0、3.0.4、および 3.0.3 で試行

マルチモジュール Maven プロジェクトのビルド (mvn install) が、一部のモジュールで失敗します。原因は、最後のモジュールが SUCCESS でビルドされたことが原因ですが、実際にはjar が空です。そして、次のモジュールは、表示する必要があるクラスを見つけることができません。

[INFO] Reactor Summary:
[INFO] 
[INFO] myproject ......................................... SUCCESS [0.309s]
[INFO] myproject-service ................................. SUCCESS [0.011s]
[INFO] myproject-service-api ............................ SUCCESS [1.242s]
[INFO] myproject-service-spi ............................ FAILURE [1.422s]
[INFO] myproject-datap-lib-impl .................. SKIPPED
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 19.746s
[INFO] Finished at: Wed Jul 24 17:30:57 EEST 2013
[INFO] Final Memory: 62M/919M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.5.1:compile (default-compile) on project myproject-service-spi: Compilation failure: Compilation failure:
[ERROR] C:\dev\mything\myproject\trunk-checkout2\service\spi\src\main\java\org\myself\service\spi\validation\fake\AbstractConfigurableFakeDetector.java:[12,55] error: package org.myself.service.validation.fake does not exist

http://nopaste.info/7f07571993.htmlの実行による完全なデバッグ出力は次のとおりです。mvn -X clean install -amd -Dmaven.test.skip=true > build.log

IntelliJ IDEA では、すべて問題ないように見えます。クラスが存在します。

生成された jar だけでなく、フォルダー service/api/target/classes も空です。

service-api の私の pom ファイルは、動作する他のものと同様に非常に基本的です。

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
         xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <artifactId>myparent</artifactId>
        <groupId>my.parent</groupId>
        <version>myversion</version>
    </parent>

    <groupId>myproject.service.api</groupId>
    <artifactId>myproject-service-api</artifactId>

    <dependencies>
        ... some local and external dependencies
    </dependencies>

    <properties>
    </properties>
</project>

ここには Maven プラグインはありません。

Maven 3がこれを検出するため、循環依存関係があるとは思いません。

アップデート

空のjarを作成するモジュールで単純なmvnコンパイルを行うと、IntelliJ IDEAで次の出力が得られます。

[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building myproject-service-api 4.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ myproject-service-api ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:\myproject\trunk-checkout2\service\api\src\main\resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ myproject-service-api ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 217 source files to C:\myproject\trunk-checkout2\service\api\target\classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.908s
[INFO] Finished at: Wed Jul 24 21:56:49 EEST 2013
[INFO] Final Memory: 20M/232M
[INFO] ------------------------------------------------------------------------

それを実行した直後、フォルダ C:\myproject\trunk-checkout2\service\api\target\classes は空です。したがって、217個のJavaクラスが検出され、mavenはそれらをコンパイルしてターゲットフォルダーに配置すると言いますが、そうではありません。

更新 2

これと比較して動作するモジュールの出力を比較しましたmvn -X compile(すべて BUILD SUCCESS で終了しますが、これには空のターゲット フォルダーがあることを思い出してください)。違いがあります。失敗した場合、すべての Java ファイルが「古いソースが検出されました」として一覧表示されます。

[DEBUG] Using compiler 'javac'.
[DEBUG] Source directories: [C:\myproject\trunk-checkout2\service\api\src\main\java]
[DEBUG] Classpath: [C:\myproject\trunk-checkout2\service\api\target\classes
... all the dependency jars
[DEBUG] Output directory: C:\myproject\trunk-checkout2\service\api\target\classes
[DEBUG] CompilerReuseStrategy: reuseCreated
[DEBUG] useIncrementalCompilation enabled
[DEBUG] Stale source detected: C:\dev\myproject\trunk-checkout2\service\api\src\main\java\my\Class.java
... listing all 217 classes
[INFO] Changes detected - recompiling the module!
[DEBUG] Classpath:
[DEBUG]  C:\myproject\trunk-checkout2\service\api\target\classes
... all the dependency jars
[DEBUG] Source roots:
[DEBUG]  C:\myproject\trunk-checkout2\service\api\src\main\java
[DEBUG] Command line options:
[DEBUG] -d (...) -g -nowarn -target 1.6 -source 1.6 -encoding UTF-8
[DEBUG] incrementalBuildHelper#beforeRebuildExecution
[INFO] Compiling 217 source files to C:\myproject\trunk-checkout2\service\api\target\classes
[DEBUG] incrementalBuildHelper#afterRebuildExecution
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.060s
[INFO] Finished at: Wed Jul 24 23:16:37 EEST 2013
[INFO] Final Memory: 22M/328M
[INFO] ------------------------------------------------------------------------

このバグ レポートhttps://jira.codehaus.org/browse/MCOMPILER-205を見たことがあります。このモジュールには package-info.java ファイルがありますが、3 以前のコンパイラ プラグインを試してみましたが、同じ結果でした。 . そして、そこに記載されている注釈を試してみましたが、運もありません。なので、同じケースではないと思います。

私は public static void main を持っていないので、このバグWorkaround for javac compilation order bug in mavenはあり得ません。

更新 3

予告なしに javac で中断があります (-verbose がオンになっています)。1 つのクラスだけが機能し、217 のすべてが失敗します。だから私はそれを引き起こしているものを見つけようとする必要があると思います....もう一度投稿します.

4

2 に答える 2