【问题标题】:Maven + Java package declarationMaven + Java 包声明
【发布时间】:2012-11-05 01:31:02
【问题描述】:

我们有一个带有 Java 文件的 Maven 项目(打包为 JAR)。最近向该项目添加了一个新的 Java 源文件。添加 Java 文件的路径与其包声明不匹配。正如预期的那样,Eclipse 在类中显示了不匹配的错误。但是,Maven 可以很好地构建项目。在生成的 JAR 文件中,.class 文件位于包声明指示的路径中。我们尝试将 Java 源文件移动到其他不正确的文件夹(即与包声明不同),但每次 Maven 都可以正常构建项目。

那么,Maven 会忽略 .java 文件所在的实际目录吗?是否只考虑包声明?

【问题讨论】:

  • 请添加一些详细信息,例如您的 pom(至少它的包装,如 war、jar 等)、文件夹结构、添加新文件的路径等。
  • 我在我的问题中提到过包装是 JAR。至于其他细节,对不起,但我不明白这对这个问题有什么帮助。无论如何,我只能提供示例值,因为我正在处理一些专有代码。
  • 其实我只是想知道你的文件的确切位置,因为 maven 是非常特定于结构的。但无论如何,正如你所说,你的 Maven 构建工作正常,没关系。您可以做的一些事情是,检查您是否在 Eclipse 中正确配置了 maven 插件。那么不仅仅是在eclipse中添加项目,而是在eclipse中将您的项目“导入”为“Maven项目”,然后它应该与maven build同步。
  • @RaviK 不,在这种特殊情况下,导入项目将无济于事。 Eclipse 处理源文件夹,Maven 处理源文件夹几乎到最后,但将单个源文件的列表传递给编译器,这是主要区别。

标签: java maven package


【解决方案1】:

Maven 编译器插件在内部组装了一个命令行调用,其中包含传递给 javac 的参数,每个源文件一个参数(使用the sourcefiles version of the javac call)。它确实传递了实际的源文件夹,也用于注释处理等元功能,但是当单个源文件传递给 javac 时,这些优先,编译器没有有效的方法来找出哪个文件属于哪个源文件夹,因此不能t 验证包结构。

Maven Compiler Plugin内部使用Plexus Compiler API,你可以在这两个类中找到相关代码:

【讨论】:

    猜你喜欢
    • 2011-05-23
    • 1970-01-01
    • 2012-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-25
    • 2017-01-29
    • 2016-06-18
    相关资源
    最近更新 更多