【问题标题】:How to compile with all .jars in .m2?如何使用 .m2 中的所有 .jar 进行编译?
【发布时间】:2011-05-20 14:11:07
【问题描述】:

我正在尝试使用 javac 调试具有许多依赖项的文件的 mvn compile

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

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

我的问题是我不确定如何告诉 find 用 unix 文件分隔符 (:) 分隔找到的每个 jar。

也许-printf 有解决办法?

【问题讨论】:

  • 是您尝试调试的 maven 项目的 BogusFile.java 部分吗?你想调试什么?

标签: command-line maven find printf javac


【解决方案1】:

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

如果您需要为您的 maven 项目构建类路径,您可以在您的项目中运行 Maven Dependency Plugin 的复制依赖目标:

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

【讨论】:

  • @K:问题依然存在,即如何用 unix 文件分隔符 (:) 分隔找到的每个 jar?
  • @simpatico 如果您在一个目录中拥有所有 jar,则可以使用通配符指定类路径 target/dependency/*(描述为 here) - 您不需要提及每个 jar,因此不需要分开他们
  • @K:我的理解是每个 jar 都被视为类路径目录。所以有多个罐子。但是用代码证明!
  • @simpatico 请阅读有关 privious 评论中提供的通配符的文档(请参阅链接)。
  • @K:错过了那部分!但是当我编译它时,它并没有显示它选择了 CLASSPATH 中的任何 jar。尝试 javac -verbose -cp target/dependency/* BogusFile.java 报告:javac: invalid flag: target/dependency/annotations-1.3.2.jar
【解决方案2】:

通过:分隔符连接所有jar,用作编译器的类路径。

export TEST_CLASSPATH=$(find ~/.m2 -name *.jar | sed -z 's/\n/:/g')
javac -classpath $TEST_CLASSPATH:./ BogusFile.java

【讨论】:

  • @simpatico 提出了用sed 替换 Python 的编辑,这可能是一个好主意,但他们的提议有一个错误,无论如何,它可能应该作为单独的答案发布.试试export TEST_CLASSPATH=$(find ~/.m2 -name *.jar -print | sed 's/\n/:/g')
猜你喜欢
  • 1970-01-01
  • 2011-01-08
  • 2014-07-12
  • 1970-01-01
  • 2019-05-02
  • 2012-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多