2015-03-03 1 views
0

У меня совсем другая ситуация. Что-то, чего раньше не было.Как относить относительные пути для кода вне проекта pom?

У меня есть код, который не является проектом на основе maven. В основном это набор Pig Сценарий, который выполняется на Hadoop Кластер.

Теперь необходимо протестировать эти скрипты с помощью PigUnit, поэтому я создал проект на основе maven со всеми зависимостями, необходимыми для проекта.

Визуально это выглядит как

user_mapper/ 
      src/main/ 
        user.pig 
        other.pig 
      test/ 
       pom.xml 
       src/java/ 
         /UserTest.java 
         /OtherTest.java 

Как вы могли видеть, test является на основе проекта Maven в себе.

Что мне нужно
В UserTest.java я хочу сослаться на относительного пути из user.pig

Как я могу обеспечить относительный путь в UserTest.java?

+1

Что вы подразумеваете под "обеспечить"? Является '../../../ src/main/user.pig' не то, что вы хотите? – Tunaki

ответ

0

Попробуйте следующий код (внутренне использует Обще-ю банку)

import org.apache.commons.io.FileUtils; 
import org.apache.commons.io.IOUtils; 
import org.apache.commons.lang3.StringUtils; 

import java.io.File; 
import java.io.IOException; 
import java.io.InputStream; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

public class FileReader { 

Logger logger = Logger.getLogger(FileReader.class.getName()); 

static String webAppPath; 

private static final boolean IS_WINDOWS = System.getProperty("os.name").contains("indow"); 

private InputStream inputStream; 
private static FileReader fileReader; 

public String getAbsolutePath(Class appClass, String relativePath) { 
    try { 
     String parentPath = ""; 
     if (StringUtils.isNotBlank(webAppPath)) { 
      parentPath = webAppPath; 
     } else { 
      parentPath = appClass.getProtectionDomain().getCodeSource().getLocation().getPath(); 
     } 

     String osAppropriatePath = IS_WINDOWS ? parentPath.substring(1) : parentPath; 

     String absolutePath = osAppropriatePath + relativePath; 
     File file = new File(absolutePath); 
     if (!file.exists()) { 
      FileUtils.writeStringToFile(file, IOUtils.toString(readFile(relativePath), "UTF-8")); 
     } 
     return absolutePath; 
    } catch (IOException ioe) { 
     logger.log(Level.SEVERE, null, ioe); 
     return relativePath; 
    } 
} 



public void closeFileReader() { 

    synchronized (this) { 
     try { 
      inputStream.close(); 
     } catch (IOException ex) { 
      Logger.getLogger(FileReader.class.getName()).log(Level.SEVERE, null, ex); 
     } 

    } 

} 

private FileReader() { 

} 

public static FileReader getInstance() { 

    return new FileReader(); 

} 

public static String getWebAppPath() { 
    return webAppPath; 
} 

public static void setWebAppPath(String webAppPath) { 
    FileReader.webAppPath = webAppPath; 
} 

} 

И вызвать класс, чтобы получить относительный путь следующим

FileReader.getInstance().getAbsolutePath(user.pig, "user.pig"); 
0

Я решил эту проблему с помощью java.io.File в

final String filePath = new File("../src/user.pig").getAbsolutePath();