Java 有没有一个专业人士;仅限编译器";依赖项工件的作用域
我意识到这更多的是一个语义的追求,而不是功能的追求 我有三种类型的编译范围依赖项:Java 有没有一个专业人士;仅限编译器";依赖项工件的作用域,java,maven,semantics,Java,Maven,Semantics,我意识到这更多的是一个语义的追求,而不是功能的追求 我有三种类型的编译范围依赖项: 仅编译作用域,不在运行时使用。 GWT客户端开发人员、MVP4G、RestyGWT、源保留注释处理器。我使用REST,所以不需要GWT服务器端 提供-Hibernate JAR是编译所需的,但由JBoss提供 编译+运行时JAR 对于案例2,我们可以使用提供的范围。案例3,我们将使用编译范围 然而,对于案例1,我使用提供的作用域,即使JBoss根本不提供这些文件。在运行时也不需要它们 不管怎样,您不认为Maven
不管怎样,您不认为Maven应该为一个范围提供一个同义词“provided”,在这个范围中,除了编译时,实际上并不需要人工制品吗?也许,应该有一个“只编译”的范围吗?不要抱怨,如果你只知道一半的词汇,这种语言就不能提供很好的区分 如果依赖项仅用于构建,例如注释处理器,则它应该是maven
或其
否则,如果它位于编译类路径中,则需要在运行时链接生成的类文件。然后,有两种情况:
compile
provided
true
唯一没有涉及的选项是编译Java程序,并且永远不要在JVM中运行它。这是一个非常模糊的用例,我不能责怪maven的设计人员没有包括一个范围来表达这种区别——特别是因为它与maven的核心职责(构建软件)无关。如果Jar不是真正的“运行时”依赖项(仅用于构建),而不是最终工件,您可以通过各种方式排除它们:
如果存在依赖关系冲突(即提供库或框架的“all deps”版本),情况就不同了,但听起来不像您在这里遇到的情况。有人将标题编辑为“是否存在构建工具(而不是javac)所需库的Maven“编译器依赖关系”范围”,这是不合适的。首先,涉及javac(由于源保留策略的注释处理器)。第二,Maven术语是“工件”,我打算使用准确的术语“工件”而不是“库”。因此,我将标题改回原处。你的意思是说Maven没有/没有打算对源保留注释处理器进行适当的处理?我想JDK5注释是在Maven之后很久才出现的,但是Maven 3应该考虑到这一点。不,我不明白你是如何得到这种印象的。我在第二段中明确指出注释处理器应该是插件。我当然没有说那是不恰当的处理。我写的是maven插件,不是Jenkins插件。啊,你不担心注释处理器,而是注释类文件?带有Retention.SOURCE的注释非常少见,大多数人不担心在类路径中不必要地包含它们,因此它们没有特殊的作用域。请注意,严格的原因通常不是千字节,而是许可证合规性和安全性。没有人想因为分发他们不允许的内容而被起诉,或者打开额外的途径将恶意软件注入到他们的分发中。部署15MB war与150MB war是一个巨大的便利/优势/电子邮件能力。在这种情况下,你想要的是选项#3它一点也不小!生产中的其他jar会带来安全风险,也会带来许可证问题。在内部使用代码生成/编译/测试和将某些东西作为最终产品提供给付费客户是两件不同的事情(我想,我不是律师)