如何在pom项目之外引用代码的相对路径?

时间:2015-03-03 22:14:57

标签: java maven hadoop

我有一个非常不同的情况要处理。从未见过的东西。

我的代码库不是基于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

中提供相对路径

2 个答案:

答案 0 :(得分:0)

尝试以下代码(内部使用commons-io jar)

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");

答案 1 :(得分:0)

我使用java.io.File作为

解决了这个问题
final String filePath = new File("../src/user.pig").getAbsolutePath();