Mavenには、この「リアクター」の概念があります。これは、構築中のプロジェクトのリストを表すための単なる空想用語です。Mavenビルドの開始時と終了時に、Mavenはこのプロジェクトのリストを/project/name(定義されているかどうかにかかわらず(XPath)を使用してgroupId:artifactId)出力します。
リアクター内のプロジェクトごとに、Mavenは添付されたアーティファクトのリストを維持します。デフォルトでは、各モジュールpom.xmlがアタッチされており、各プラグインが実行されると、追加のアーティファクトをアタッチするオプションがあります。ほとんどのプラグインはアーティファクトをアタッチしません。アタッチするプラグインは次のとおりです。
jar:jarを作成し、.jarそれをプライマリアーティファクトとして添付します(構成で分類子を指定しない限り)
war:warを作成し.warて添付します
source:jar.jarソースJavaコードのを作成し、の分類子を付加します。source
javadoc:jar.jarのJavaDocsを作成し、の分類子を付加します。javadoc
android:apklib.apklibアーティファクトを作成し、それをプライマリアーティファクトとして添付します
デフォルトのプライマリアーティファクト(これはjar:jarに置き換えられます)もあります。これは実際にはディレクトリであり、ファイルではないため、ローカルリポジトリキャッシュまたはリモートリポジトリにインストールまたはデプロイされません。
したがって、reactor内で、プライマリアーティファクトをアタッチするプラグインがまだ実行されておらず(あなたの場合android:apklib)、別のプラグインがプライマリアーティファクトを要求すると、ディレクトリが与えられ${project.build.outputDirectory}ます。プライマリアーティファクトがアタッチされた後、そのプライマリアーティファクトが提供されます。
フェーズはtestフェーズの前に発生するpackageため、ではなくディレクトリを渡し.apklibます。
マルチモジュールプロジェクトでは事態はさらに複雑になります(これは私の長いイントロがあなたを助けるはずです)
Mavenはテストクラスパスを構築する必要があります。依存関係の1つがリアクター内にある場合、Mavenはリアクターにアタッチされたアーティファクトを使用します。それ以外の場合は、ローカルキャッシュを使用します(必要に応じてリモートリポジトリからデータを入力します)。
あなたが走るとき
mvn test
ルートからの複数のプロジェクトでは、デフォルトの(ディレクトリベースの)アーティファクトの置き換えはないため、モジュール内のクラスパスはターゲット/クラスディレクトリになります(Androidプラグインはそのようなテストの処理方法を知っていると想定しています) ...そうではないことがわかりました)。
あなたが走るとき
mvn package
また
mvn install
ただし、同じプロジェクトでは、各モジュールがライフサイクルを順番に完了するため、すべての依存モジュールは.apklib、添付されたアーティファクトとしてファイルをスワップインします。
ここでの問題の可能性が最も高いのは、テストがディレクトリで機能せず、実際の.apklibファイルが必要になることです。その場合、ライフサイクルを少なくともpackageフェーズにプッシュする以外に選択肢はありません。