【问题标题】:maven-exec-plugin not able to lookup un-compiled classes from src/main/javamaven-exec-plugin 无法从 src/main/java 查找未编译的类
【发布时间】:2015-12-07 15:52:53
【问题描述】:

我有一个奇怪的要求,即源是由基于 src/main/java 中的源的 jar 生成的。最终的 jar 应该捆绑生成的文件而不是 src/main/java 中的文件。

这是我所做的: 1.在src/main/java中添加源码 2. 添加 maven-exec-plugin 以从作为依赖项添加的 jar 调用 main-class 并传递所需的参数。 3. 添加build-helper-maven-plugin 将生成的源的路径添加到maven源中。 4. 添加了maven-jar-plugin 来包含和排除需要的类。

问题:执行第 2 步时,主类抱怨它无法找到 src/main/java 中存在的类。在用于动态创建实例之前编译类是否需要...如 Class.forname("package.Class")?

如果 maven-exec-plugin 在“编译”阶段之后执行,则没有 ClassNotFoundException,但问题是生成的源文件在捆绑之前没有被编译,我看到带有“.java”扩展名的文件被捆绑在生成的jar。

【问题讨论】:

  • 看起来你真的应该分享你的pom.xml,你不觉得......吗? :)

标签: java maven


【解决方案1】:

让您的生活更简单:使用maven modules

root
 |
 +----> generator
 |
 +----> generated

将您的项目拆分为两个模块,一个生成器模块和一个包含您生成的代码的模块。这样,在每个模块中,您都可以采用标准的 Maven 生命周期:

在生成器模块中,一切正常。

“生成”模块引用“生成器”模块作为范围为provided 的依赖项,它在generate-sources 阶段执行exec 插件,使用文件夹target/generated-sources/<your generator> 作为输出文件夹。您可能还需要buildhelper-maven-pluginadd the generated sources folder as source root。其他一切都照常工作。

【讨论】:

  • 将生成的源添加到项目中,您可以使用 exec-maven-plugin 的sourceRoot 更简单...
  • @khmarbaise 不错,不知道
猜你喜欢
  • 1970-01-01
  • 2020-12-22
  • 2020-04-07
  • 2017-04-11
  • 1970-01-01
  • 1970-01-01
  • 2012-11-16
  • 2019-09-20
  • 2015-01-28
相关资源
最近更新 更多