当前位置: 首页 > 面试题库 >

Maven + Java包声明

祁英哲
2023-03-14
问题内容

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

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


问题答案:

Maven编译器插件在内部组装了一个命令行调用,其中包含传递给javac的参数,每个源文件一个参数(使用javac调用的sourcefiles版本)。它还会为诸如注释处理之类的元功能传递实际的源文件夹,但是当将单个源文件传递给javac时,它们将具有优先权,并且编译器没有有效的方法来找出哪个文件属于哪个源文件夹,因此可以’
t验证包装结构。

Maven编译器插件在内部使用Plexus编译器API,您可以在以下两个类中找到相关的代码:

  • plexus-compiler-api: AbstractCompiler
  • plexus-compiler-javac: JavacCompiler


 类似资料:
  • 10.3. 包声明 在每个Go语言源文件的开头都必须有包声明语句。包声明语句的主要目的是确定当前包被其它包导入时默认的标识符(也称为包名)。 例如,math/rand包的每个源文件的开头都包含package rand包声明语句,所以当你导入这个包,你就可以用rand.Int、rand.Float64类似的方式访问包的成员。 package main import ( "fmt"

  • 问题内容: 在Java中,为什么每个类都必须声明其所属的包。我的意思是,已经使用文件系统的文件夹结构描述/强制使用了软件包hierachy。在我看来,该行: 作为每个类的第一行,都是多余的信息。但我很确定有充分的理由让它存在。 问题答案: 我的意思是,已经使用文件系统的文件夹结构描述/强制使用了软件包hierachy。 不必要。虽然以这种方式组织代码当然是一个好主意,但这不是必需的。还请记住,源代

  • null 请让我知道如何解决这个问题。谢谢你。

  • 问题内容: 在Java中,你可以在一个文件中定义多个顶级类,条件是其中最多一个是公共的(请参见JLS§7.6)。参见以下示例。 是否有此技术整洁名(类似于)? JLS表示系统可能会强制执行这些二级类不能为的限制,例如,它们不能被视为程序包专用。这真的在Java实现之间有所改变吗? 例如,PublicClass.java: 问题答案: 对于这种技术,我建议的名称(在一个源文件中包括多个顶级类)将是“

  • 我定义了一个package-info.java类,我需要生成一个xml文件,其中包含这里定义的所有xmlns: 在生成的xml中,前缀xs将被删除。 我假设因为namespaceURI它被定义了两次,但我需要两个命名空间。有没有任何配置可以保持所有XmlN前缀的定义? 编辑:21/03/2022 我最终以编程方式添加了该命名空间: