运行maven编译两次

2024-05-19

我正在将 ant 项目迁移到 Maven,这个项目非常不寻常:它使用两个编译步骤和这些编译步骤之间的代码生成步骤。整个构建过程可以描述如下:

  1. 编译 src 目录中的所有内容
  2. 运行内部java工具,将java指向已编译的类和用于编译这些类的jar。该工具使用反射根据已编译的类生成代码。
  3. 编译生成的类并最终组装一个 jar。

我发现了一些建议创建自定义生命周期的链接,但我不知道从哪里开始。 如果有人可以指出类似的项目配置,那就太好了。

使用 Maven 实现这一目标的最简单方法是什么? 我想我应该使用 ant maven 插件,但我仍然不明白如何让它编译源两次并在第一个编译步骤后将其指向生成的源。


好吧,我终于知道该怎么做了。

基本上我在不同的构建阶段运行编译器,以便编译发生在生成源阶段,代码在进程源阶段生成,最后编译器在“编译”阶段进行最终编译。

这是我的配置:

<build>
<plugins>
  <!-- Code generation, executed after the first compiler pass -->
  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.2.1</version>
    <executions>
      <execution>
        <id>generateCode</id>
        <phase>process-sources</phase>
        <goals>
          <goal>java</goal>
        </goals>
        <configuration>
          <classpathScope>test</classpathScope>
          <mainClass>my.code.Generator</mainClass>
          <arguments>
            <argument>-target</argument>
            <argument>${project.build.directory}/generated-sources/java</argument>
            <argument>-source</argument>
            <argument>my.code.generator.Configuration</argument>
          </arguments>
        </configuration>
      </execution>
    </executions>
  </plugin>

  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.1</version>
    <executions>
      <execution>
        <id>add-source</id>
        <phase>process-sources</phase>
        <goals>
          <goal>add-source</goal>
        </goals>
        <configuration>
          <sources>
            <source>${project.build.directory}/generated-sources/java</source>
          </sources>
        </configuration>
      </execution>
    </executions>
  </plugin>


  <!-- Custom compilation mode -->
  <plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <executions>
      <execution>
        <id>default-compile</id>
        <phase>generate-sources</phase>
      </execution>
      <execution>
        <id>build-generated-code</id>
        <phase>compile</phase>
        <goals>
          <goal>compile</goal>
        </goals>
        <configuration>
          <generatedSourcesDirectory>${project.build.directory}/generated-sources/java</generatedSourcesDirectory>
        </configuration>
      </execution>
    </executions>
  </plugin>
</plugins>
</build>

希望这对某人有帮助。

UPDATE您可能会注意到编译器不必要地在最终编译器传递时编译所有源代码。要微调您的特定编译器传递,您可能需要为您的项目使用“排除”/“包含”配置。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

运行maven编译两次 的相关文章

随机推荐

  • Pickle django 查询?

    是否可以在数据库中腌制或以某种方式存储 django 查询 这是行不通的 u User objects all import cPickle pickled query cPickle dumps u and store the pickl
  • PyCharm 表示 readline 导入未被使用

    我有这个代码 while True cmd input gt if cmd exit break 但我想实现高级文本输入功能 例如命令历史记录 因此我导入了 readline 模块 导入 readline 模块 甚至不使用它 将解锁这些功能
  • 如果我的消耗性 IAP 被退款,我会收到任何通知吗?

    我有 Apple iOS 应用程序 其中有很多消耗性 IAP 我非常担心用户购买IAP并使用一段时间后向Apple客服投诉并获得退款 如果我的消耗品 IAP 退款 我会收到任何通知吗 我如何注意到这一点并阻止用户使用 IAP None
  • 如何使用pyinstaller?

    好吧 我是一个完全的编程菜鸟 我正在尝试编译一个我编写的简单程序 该程序接受一个字符串并以莫尔斯电码打印该字符串 它被称为 morse py 我使用安装 pyinstaller pip install pyinstaller 我正在尝试使用
  • file_get_contents 大文件上传

    我正在尝试使用 fsockopen 上传 2GB 以上的大文件 但 file get content 出现以下错误 我无法在内存中存储大文件 我需要分块发送数据 但不知道如何执行此操作 请问有人可以指导我吗 致命错误 允许的内存大小 134
  • ASP .NET:用户控件何时加载?

    MasterPage gt Page gt UserControl 是 ASP NET 请求的加载顺序吗 是否存在 UserControl 在页面加载之前加载的情况 我有给我的用户的私人消息 他们在每个页面上都会看到这样的消息 您有 3 条
  • “引起:java.lang.RuntimeException:视图必须有标签”的实际含义是什么?

    如果知道想要什么标签 请告诉我 Caused by java lang RuntimeException view must have a tag BaseActivity java Override public void setCont
  • 如何像在 localStorage 中一样从 localForage 分配变量?

    请帮我解决以下问题 我一直在将我的 AngularJS 应用程序从 localStorage 转换为 localForage 在我的应用程序中 我像这样分配 localStorage 值 window localStorage setIte
  • 在 Java 中验证 HMAC SHA1 签名

    我想知道如何验证我创建的签名 我创建签名的代码与此类似 HMAC SHA1 如何在 Java 中正确执行此操作 https stackoverflow com questions 6312544 hmac sha1 how to do it
  • highcharts 可点击标签如何转到锚点

    我在 Backbone 应用程序中使用 Highcharts 在柱形图中显示一些信息 我使用图表中的数据标签来允许用户单击并移动到该数据点的详细信息页面 这不是正常的 window location 调用 而应该是 window locat
  • 使用 ifstream 在大文件中查找

    我正在使用 ifstream 在 C 中实现一个程序 该程序必须在大文件 1TB 中查找 然而 读取2GB后就失败了 有没有办法获取文件位置 即使是大文件 我为 32 位 Windows 机器进行编译 std ifstream f f op
  • 解析错误:语法错误,意外的 T_RETURN [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 遇到这个问
  • 如何检查 BOOL 是否为空?

    有没有办法在将值分配给 BOOL 之前检查该值是否为 NULL Nil 例如 我在 NSDictionary 中有一个值可以是 TRUE FALSE NULL mySTUser current user following results
  • 比较 rspec 自定义 ActiveRecord::RecordInvalid 错误消息

    模型中有以下内容 validates uniqueness of title if proc item item item type tag case sensitive false message I18n t errors key va
  • 可以有一个带有可变列的表吗?

    这可能是一个愚蠢的问题 但这里是 是否可以创建一个能够包含具有可变列数和自定义列名称的行的动态表 我浏览过 EAV 建模 但看起来很沉重 现实生活中的例子可能是这样的 假设我有一个客户登记册 但每个客户可能需要输入不同的信息 根据您要输入的
  • 无法解决dll之间的冲突

    我在构建中收到类似于以下内容的警告墙 No way to resolve conflict between Newtonsoft Json Version 7 0 0 0 and Newtonsoft Json Version 6 0 0
  • 将下一个参数作为 String.Format 中的字段宽度

    在 C 中 我有一个想要用于某些字符串的宽度 但直到运行时我才知道该宽度 我正在做这样的事情 string Format 0 digits value prints 123 as 123 是否有一个字符串格式化指令可以让我指定它 而无需像这
  • Powershell v2 远程处理和委派

    我在两台机器上安装了 Powershell V2 并在两台机器上运行 Enable PsRemoting 两台机器都是Win 2003 R2 并且都加入了同一个活动目录域 我可以成功地远程运行命令 所以PS远程处理是在本地服务器和远程服务器
  • 是否可以设置输入文本值的样式?

    我想知道是否可以设置输入框值的样式 such http jsfiddle net aCwhY as
  • 运行maven编译两次

    我正在将 ant 项目迁移到 Maven 这个项目非常不寻常 它使用两个编译步骤和这些编译步骤之间的代码生成步骤 整个构建过程可以描述如下 编译 src 目录中的所有内容 运行内部java工具 将java指向已编译的类和用于编译这些类的ja