【问题标题】:Dependency Management in java using annotationsjava中使用注解的依赖管理
【发布时间】:2011-05-20 18:04:30
【问题描述】:

我在所有 java 项目(以及一些非 java 项目)中都广泛使用了 maven。但是,我非常喜欢使用注释将配置从 XML 文件中移出并移入 java 源文件。我最近在 Groovy Grape 页面上发现了以下内容:

添加依赖

@Grab(group='org.springframework', module='spring', version='2.5.6')
import org.springframework.jdbc.core.JdbcTemplate

虽然这是 Groovy 代码,但似乎上述内容在 Java 中并非完全不可能。虽然这似乎不太可能(或将)内置到 javac 本身中,但它可以内置到 Maven 或其他构建“包装器”中。

你有什么想法?

编辑:我突然想到,注释在 java 中的 import 语句上无效。这确实存在问题...

【问题讨论】:

  • 假设你有 250 个 java 源文件,它们都导入了 org.springframework.jdbc.core。你会在哪里搜索构建依赖的注解?
  • 只要至少有一个导入语句(假设在导入语句上允许注释)指定其构建依赖项的来源。如果发现两个冲突的规范,可能会引发错误。

标签: java groovy build maven annotations


【解决方案1】:

您可以构建注释预处理器来分析这些类型的注释的来源。查看 Javadocs here

【讨论】:

    【解决方案2】:

    我认为您不希望使用依赖注释来注释所有类的想法。这就是为什么将类分组到称为模块或项目的单元中的原因,以便一个工件的导入或依赖解析可用于特定组或模块中的所有类。

    但是,您很可能会成为 Gradle 的忠实粉丝。虽然它不完全是注释,但 Gradle 解决了您的大部分问题。

    http://www.gradle.org/

    【讨论】:

      【解决方案3】:

      从技术上讲,可以在任何语言(groovy、python、antlr)上编写 *.java 文件预处理器,以处理文件并在注释的基础上生成 pom.xml(最好只填充现有 pom.xml 中的依赖部分)和模块结构(应该注释注释以不干扰java编译器和IDE突出显示,如旧XDoclet)。我想这是您自己项目的想法)。 但是从我的角度来看,这是个坏主意。如果要更改 spring 版本会发生什么?您是否应该扫描所有项目文件并替换它,然后重新编译。构建和配置应该与代码分开。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-15
        • 2013-12-29
        • 1970-01-01
        • 2021-07-05
        • 1970-01-01
        • 1970-01-01
        • 2020-09-04
        • 1970-01-01
        相关资源
        最近更新 更多