0

cli で hdfs を参照するための小さな ossプロジェクトを完成させる予定です (ncdu など)。ここで、さまざまな依存関係でそれを出荷する方法を解決する必要があります (hadoop のさまざまなディストリビューションがあるため)。

私のユースケースでは、それらの Java API は同じであるため、理論的には、いくつかの依存関係を置き換えて、それらを 1 つずつビルドするだけで済みます。すべての単体テストと展開を含めて、手動で行うのは便利ではありません。

mvn install異なるバージョンで3回実行する方法はありますか?

このバージョンでこれをビルドする必要があります(依存関係が異なるcdhバージョンではありません):

  • 0.23.9
  • 2.0.0-cdh4.2.0
  • 2.0.0-cdh4.3.0

私が思いついた唯一の解決策は、3 つのプロファイルを用意してから、CImvn installを異なるプロファイルで 3 回実行させることです。

このような:

mvn install -Phadoop-vanillia-0.23.9
mvn install -Phadoop-cdh4.2.0
mvn install -Phadoop-cdh4.3.0

そのための私の pom.xml は次のようになります。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <!-- ... -->
    <profiles>
        <profile>
            <id>hadoop-vanillia-0.23.9</id>
            <properties>
                <hadoop-distribution>vinallia-0.23.9</hadoop-distribution>
                <hadoop.version.generic>0.23.9</hadoop.version.generic>
            </properties>

            <dependencies>
                <dependency>
                    <groupId>org.apache.hadoop</groupId>
                    <artifactId>hadoop-common</artifactId>
                    <version>${hadoop.version.generic}</version>
                </dependency>

                <dependency>
                    <groupId>org.apache.hadoop</groupId>
                    <artifactId>hadoop-hdfs</artifactId>
                    <version>${hadoop.version.generic}</version>
                </dependency>
            </dependencies>
        </profile>

        <profile>
            <id>hadoop-cdh4.2.0</id>
            <properties>
                <hadoop-distribution>cdh4.2.0</hadoop-distribution>
                <hadoop.version.generic>2.0.0-cdh4.2.0</hadoop.version.generic>
                <hadoop.version.mr1>2.0.0-mr1-cdh4.2.0</hadoop.version.mr1>
            </properties>

            <dependencies>
                <dependency>
                    <groupId>org.apache.hadoop</groupId>
                    <artifactId>hadoop-common</artifactId>
                    <version>${hadoop.version.generic}</version>
                </dependency>

                <dependency>
                    <groupId>org.apache.hadoop</groupId>
                    <artifactId>hadoop-hdfs</artifactId>
                    <version>${hadoop.version.generic}</version>
                </dependency>

                <dependency>
                    <groupId>org.apache.hadoop</groupId>
                    <artifactId>hadoop-tools</artifactId>
                    <version>${hadoop.version.mr1}</version>
                </dependency>
            </dependencies>

            <repositories>
                <repository>
                    <id>cloudera</id>
                    <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
                </repository>
            </repositories>
        </profile>

        <profile>
            <id>hadoop-cdh4.3.0</id>
            <properties>
                <hadoop-distribution>hadoop-cdh4.3.0</hadoop-distribution>
                <hadoop.version.generic>2.0.0-mr1-cdh4.3.0</hadoop.version.generic>
            </properties>
            <!-- Same then 4.2.0 here ... -->
        </profile>

    </profiles>

    <properties>
        <!-- ... -->
    </properties>

    <dependencies>
        <!-- ... -->
    </dependencies>

    <build>
        <plugins>

            <!-- ... -->
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>appassembler-maven-plugin</artifactId>
                <version>1.4</version>
                <configuration>
                    <programs>
                        <program>
                            <mainClass>${mainClass}</mainClass>
                            <name>nchadoop</name>
                        </program>

                        <!-- put the flavours into different folders: -->
                        <assembleDirectory>${project.build.directory}/appassembler/${hadoop-distribution}/</assembleDirectory>
                    </programs>

                    <!-- ... -->
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

これをよりエレガントにする方法はありますか?多分モジュールで?

4

0 に答える 0