2017-04-14 36 views
2

我正在構建一個jar文件以在Hadoop集羣上運行它。當我在Windows平臺上構建jar並將其複製到Hadoop機器時,它工作正常,但是當我在Linux機器上構建jar時。它給了我下面的錯誤: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) 

pom.xml的摘錄如下:

<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

比較兩個文件,可以手動或使用工具,如「無法比擬」。你是否在同一臺計算機上運行其中的一個文件? – Marged

回答

0

你可以嘗試添加番石榴依賴性:

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

我試過這個,它確實工作,但是,一個新的「org.apache.commons」(是一個目錄)出現,這次添加依賴不起作用。我認爲這個問題有根本原因,爲此,我需要了解在不同平臺上構建jar的差異。 –

相關問題