如何编译.m2中的所有.jars?

时间:2011-05-20 14:11:07

标签: command-line maven find printf javac

我正在尝试调试mvn compilejavac有很多依赖关系的文件。

这就是我尝试这样做的方式:

CLASSPATH=`find ~/.m2 -name *.jar -print0`; javac -verbose BogusFile.java

我的问题是我不知道怎么告诉find将unix文件分隔符(:)中找到的每个jar分开。

也许-printf有解决方案?

2 个答案:

答案 0 :(得分:8)

很抱歉,我无法回答您的问题,但提供了其他解决方法。

如果您需要为maven项目构建类路径,则可以在项目中运行Maven Dependency Plugin的copy-dependencies目标:

mvn dependency:copy-dependencies

Maven会将项目的所有依赖项(也是可传递的)复制到target/dependency目录,类路径可以设置为target/dependency/*;(您仍然需要包含工件jar)。

示例:

代码:

import org.apache.commons.lang.WordUtils;
import org.apache.log4j.Logger;

public class Bogus {

    private static final Logger LOG = Logger.getLogger(Bogus.class);

    public static void main(final String[] args) {
        LOG.debug(WordUtils.capitalize("hello world"));
    }
}

目录:

C:.
│
├───src
│   └───main
│       └───java
│               Bogus.java
│
└───target
    └───dependency
            commons-lang-2.6.jar
            log4j-1.2.16.jar

编译命令:

.....\bogus>javac -cp target\dependency\*; src\main\java\Bogus.java

结果:

C:.
│
├───src
│   └───main
│       └───java
│               Bogus.class
│               Bogus.java
│
└───target
    └───dependency
            commons-lang-2.6.jar
            log4j-1.2.16.jar

答案 1 :(得分:1)

我不是Unix忍者,所以我用Python将jar加入了分隔符。

export TEST_CLASSPATH=`find ~/.m2 -name *.jar | python -c "import sys; print ':'.join(sys.stdin.read().splitlines())"`
javac -classpath $TEST_CLASSPATH:./ BogusFile.java