2017-04-14 2 views
2

私は、Hadoopクラスタ上で実行するために単一のjarファイルを構築しています。私はWindowsプラットフォーム上でjarファイルをビルドし、それをHadoopマシンにコピーするとうまく動作しますが、Linuxマシン上にjarをビルドすると動作します。それは私に次のエラーを与える:次のようにのpom.xmlのWindowsとLinux上の単一のJARビルドはどう違うのですか?

Exception in thread "main" java.io.FileNotFoundException: /tmp/hadoop-unjar7077828764688507370/META-INF/maven/com.google.guava (Is a directory) 
    at java.io.FileOutputStream.open0(Native Method) 
    at java.io.FileOutputStream.open(FileOutputStream.java:270) 
    at java.io.FileOutputStream.<init>(FileOutputStream.java:213) 
    at java.io.FileOutputStream.<init>(FileOutputStream.java:162) 
    at org.apache.hadoop.util.RunJar.unJar(RunJar.java:105) 
    at org.apache.hadoop.util.RunJar.unJar(RunJar.java:81) 
    at org.apache.hadoop.util.RunJar.run(RunJar.java:209) 
    at org.apache.hadoop.util.RunJar.main(RunJar.java:136) 

抽出物である:

<dependencies> 
    <dependency> 
     <groupId>org.apache.hadoop</groupId> 
     <artifactId>hadoop-common</artifactId> 
     <version>2.7.0</version> 
     <type>jar</type> 
    </dependency> 
    <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-mapreduce-client-core --> 
    <dependency> 
     <groupId>org.apache.hadoop</groupId> 
     <artifactId>hadoop-mapreduce-client-core</artifactId> 
     <version>2.7.0</version> 
    </dependency> 

</dependencies> 
<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.1</version> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
      </configuration> 
     </plugin> 

     <!-- Skip the tests run. --> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.15</version> 
      <configuration> 
       <skipTests>true</skipTests> 
      </configuration> 
     </plugin> 

     <!-- Sources generation --> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-source-plugin</artifactId> 
      <version>2.4</version> 
      <executions> 
       <execution> 
        <id>attach-sources</id> 
        <phase>verify</phase> 
        <goals> 
         <goal>jar-no-fork</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>3.0.0</version> 
      <configuration> 
       <descriptorRefs> 
        <descriptorRef>jar-with-dependencies</descriptorRef> 
       </descriptorRefs> 
       <archive> 
        <manifest> 
         <mainClass>com.ga.gachainmr.GAChainMR</mainClass> 
        </manifest> 
       </archive> 
      </configuration> 
      <executions> 
       <execution> 
        <id>make-assembly</id> <!-- this is used for inheritance merges --> 
        <phase>package</phase> <!-- bind to the packaging phase --> 
        <goals> 
         <goal>single</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

は、あなたが他のファイルが必要なら、私に教えてください。

+0

は、手動または「越えて比較」のようなツールを使用して、2つのファイルを比較してください。あなたはそれを構築する同じコンピュータ上のファイルのいずれかを実行しますか? – Marged

答えて

0

あなたはグアバの依存関係を追加してみてくださいすることができます

<dependency> 
    <groupId>com.google.guava</groupId> 
    <artifactId>guava</artifactId> 
    <version>21.0</version> 
</dependency> 
+0

これを試してもうまくいきましたが、新しい "org.apache.commons"(ディレクトリです)が現れ、今回は依存関係が追加されませんでした。私はこの問題の根本的な原因があると思います。そのためには、さまざまなプラットフォームでjarファイルを構築することの違いを理解する必要があります。 –

関連する問題