Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有一个专业人士;仅限编译器";依赖项工件的作用域_Java_Maven_Semantics - Fatal编程技术网

Java 有没有一个专业人士;仅限编译器";依赖项工件的作用域

Java 有没有一个专业人士;仅限编译器";依赖项工件的作用域,java,maven,semantics,Java,Maven,Semantics,我意识到这更多的是一个语义的追求,而不是功能的追求 我有三种类型的编译范围依赖项: 仅编译作用域,不在运行时使用。 GWT客户端开发人员、MVP4G、RestyGWT、源保留注释处理器。我使用REST,所以不需要GWT服务器端 提供-Hibernate JAR是编译所需的,但由JBoss提供 编译+运行时JAR 对于案例2,我们可以使用提供的范围。案例3,我们将使用编译范围 然而,对于案例1,我使用提供的作用域,即使JBoss根本不提供这些文件。在运行时也不需要它们 不管怎样,您不认为Maven

我意识到这更多的是一个语义的追求,而不是功能的追求

我有三种类型的编译范围依赖项:

  • 仅编译作用域,不在运行时使用。 GWT客户端开发人员、MVP4G、RestyGWT、源保留注释处理器。我使用REST,所以不需要GWT服务器端

  • 提供-Hibernate JAR是编译所需的,但由JBoss提供

  • 编译+运行时JAR

  • 对于案例2,我们可以使用提供的范围。案例3,我们将使用编译范围

    然而,对于案例1,我使用提供的作用域,即使JBoss根本不提供这些文件。在运行时也不需要它们


    不管怎样,您不认为Maven应该为一个范围提供一个同义词“provided”,在这个范围中,除了编译时,实际上并不需要人工制品吗?也许,应该有一个“只编译”的范围吗?

    不要抱怨,如果你只知道一半的词汇,这种语言就不能提供很好的区分

    如果依赖项仅用于构建,例如注释处理器,则它应该是maven
    或其

    否则,如果它位于编译类路径中,则需要在运行时链接生成的类文件。然后,有两种情况:

  • 总是有必要加载该类
  • 类应作为应用程序的一部分提供:
    compile
  • 类应该由运行时环境提供:
    provided
  • 有时是必要的(因为该类仅在特定情况下才会加载):
    true

  • 唯一没有涉及的选项是编译Java程序,并且永远不要在JVM中运行它。这是一个非常模糊的用例,我不能责怪maven的设计人员没有包括一个范围来表达这种区别——特别是因为它与maven的核心职责(构建软件)无关。

    如果Jar不是真正的“运行时”依赖项(仅用于构建),而不是最终工件,您可以通过各种方式排除它们:

  • 程序集描述符中的排除
  • jar(或war、ear等)插件配置中的排除
  • 目标
  • 我同意发送不必要的类是令人讨厌的(我在生产部署中见过junit和testng JAR-brrrr…),但对于所有实际用途来说,这是一个相当小的问题


    如果存在依赖关系冲突(即提供库或框架的“all deps”版本),情况就不同了,但听起来不像您在这里遇到的情况。

    有人将标题编辑为“是否存在构建工具(而不是javac)所需库的Maven“编译器依赖关系”范围”,这是不合适的。首先,涉及javac(由于源保留策略的注释处理器)。第二,Maven术语是“工件”,我打算使用准确的术语“工件”而不是“库”。因此,我将标题改回原处。你的意思是说Maven没有/没有打算对源保留注释处理器进行适当的处理?我想JDK5注释是在Maven之后很久才出现的,但是Maven 3应该考虑到这一点。不,我不明白你是如何得到这种印象的。我在第二段中明确指出注释处理器应该是插件。我当然没有说那是不恰当的处理。我写的是maven插件,不是Jenkins插件。啊,你不担心注释处理器,而是注释类文件?带有Retention.SOURCE的注释非常少见,大多数人不担心在类路径中不必要地包含它们,因此它们没有特殊的作用域。请注意,严格的原因通常不是千字节,而是许可证合规性和安全性。没有人想因为分发他们不允许的内容而被起诉,或者打开额外的途径将恶意软件注入到他们的分发中。部署15MB war与150MB war是一个巨大的便利/优势/电子邮件能力。在这种情况下,你想要的是选项#3它一点也不小!生产中的其他jar会带来安全风险,也会带来许可证问题。在内部使用代码生成/编译/测试和将某些东西作为最终产品提供给付费客户是两件不同的事情(我想,我不是律师)