如何使用.m2中的所有.jar进行编译?

发布于 2024-11-08 20:36:38 字数 306 浏览 0 评论 0原文

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

这就是我尝试执行此操作的方式:

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

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

也许 -printf 有解决方案?

I'm trying debug mvn compile of a file with many dependencies with javac.

This is how I'm trying to do this:

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

My problem is that I'm not sure how to tell find to separate each jar found with the unix file separator (:).

Maybe the -printf has the solution?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

如此安好 2024-11-15 20:36:38

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

如果您需要为您的 Maven 项目构建类路径,您可以运行 Maven 依赖项插件<的复制依赖项目标/a> 在您的项目上:

mvn dependency:copy-dependencies

Maven 会将项目的所有依赖项(也是传递性的)复制到 target/dependency 目录,并且类路径可以设置为 target/dependency/*;(您仍然需要包括您的神器罐)。

示例:

代码:

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

Sorry I can not answer your question but give a possible other solution approach.

If you need to build a classpath for your maven project you can run the copy-dependencies goal of the Maven Dependency Plugin on your project:

mvn dependency:copy-dependencies

Maven will copy all dependencies for your project (also transitive) to the target/dependency directory and classpath can be set to target/dependency/*; (you still have to include your artifact jar).

Example:

Code:

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

Directory:

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

Compile Command:

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

Result:

C:.
│
├───src
│   └───main
│       └───java
│               Bogus.class
│               Bogus.java
│
└───target
    └───dependency
            commons-lang-2.6.jar
            log4j-1.2.16.jar
紫瑟鸿黎 2024-11-15 20:36:38

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

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

Join all the jars by : separator, to use as the classpath for the compiler.

export TEST_CLASSPATH=$(find ~/.m2 -name *.jar | sed -z 's/\n/:/g')
javac -classpath $TEST_CLASSPATH:./ BogusFile.java
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文