2013-09-05 21 views
3

我在寫一個Pig UDF,並試圖使用Maven將它編譯成一個jar。 Eclipse中的代碼註冊狀態良好,但是當我在Maven中構建代碼時,出現無法找到符號錯誤,如下所示。我檢查了openReader方法的方法簽名,它匹配我傳遞它的類,所以我不確定Maven編譯出了什麼問題。Maven找不到符號,但獨立構建作品

依賴段:

<dependency> 
    <groupId>org.apache.hadoop</groupId> 
    <artifactId>hadoop-core</artifactId> 
    <version>${hadoop.version}</version> 
    <exclusions> 
     <exclusion> 
      <groupId>hsqldb</groupId> 
      <artifactId>hsqldb</artifactId> 
     </exclusion> 
     <exclusion> 
      <groupId>net.sf.kosmosfs</groupId> 
      <artifactId>kfs</artifactId> 
     </exclusion> 
     <exclusion> 
      <groupId>org.eclipse.jdt</groupId> 
      <artifactId>core</artifactId> 
     </exclusion> 
     <exclusion> 
      <groupId>net.java.dev.jets3t</groupId> 
      <artifactId>jets3t</artifactId> 
     </exclusion> 
     <exclusion> 
      <groupId>oro</groupId> 
      <artifactId>oro</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 
<dependency> 
    <groupId>org.apache.avro</groupId> 
    <artifactId>avro-mapred</artifactId> 
    <version>1.7.5</version> 
</dependency> 
<dependency> 
    <groupId>org.apache.avro</groupId> 
    <artifactId>avro</artifactId> 
    <version>1.7.5</version> 
</dependency> 

代碼段:

import org.apache.avro.file.DataFileReader; 
import org.apache.avro.file.FileReader; 
import org.apache.avro.file.SeekableInput; 
import org.apache.avro.generic.GenericDatumReader; 
import org.apache.avro.generic.GenericRecord; 
import org.apache.avro.io.DatumReader; 
import org.apache.avro.mapred.FsInput; 
import org.apache.hadoop.conf.Configuration; 
import org.apache.hadoop.fs.Path; 

protected String getLastRecord(String location) throws IOException { 
    Path path = new Path(location); 
    Configuration config = new Configuration(); 
    SeekableInput input = new FsInput(path, config); 
    DatumReader<GenericRecord> reader = new GenericDatumReader<GenericRecord>(); 
    FileReader<GenericRecord> fileReader = DataFileReader.openReader(input, reader); 
    Iterator<GenericRecord> itr = fileReader.iterator(); 

    long initialPosition = input.tell(); 
    itr.next(); 
    long newPosition = input.tell(); 

    input.seek(input.length() - (initialPosition - newPosition)); 
    return itr.next().get("id").toString(); 
}; 

錯誤:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project newscred-recsys-udfs: Compilation failure 
[ERROR] /Users/andrew/Code/recommender/hadoop/newscred_recsys/udfs/java/src/main/java/com/mortardata/newscred/recsys/SqoopAvroLoader.java:[104,64] cannot find symbol 
[ERROR] symbol: method openReader(org.apache.avro.file.SeekableInput,org.apache.avro.io.DatumReader<org.apache.avro.generic.GenericRecord>) 
[ERROR] location: class org.apache.avro.file.DataFileReader 
[ERROR] -> [Help 1] 

回答

1

Apparen tly,org.apache.avro的jar與Apache網站分發的jar有不同的方法,導致不匹配。

+0

似乎很奇怪......你是否嘗試在日食中使用本地maven回購的avro jar? – ben75

+0

這就是我解決問題的方法。在使用我在開發期間從apache網站下載的那個之前。但是當我去更新maven文件時,我遇到了這個問題。 –

2

該項目應該清理。項目 - >清潔