You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过运行Maven任务使用Freemarker生成txt文件的实现咨询

需求可行性结论

该需求完全可实现,Maven生命周期天生支持在指定阶段绑定定制任务,以下是两种成熟的落地方案:


方案一:使用开源freemarker-maven插件(推荐,零自定义代码)

无需修改你已有的Java逻辑,直接通过插件配置即可完成能力接入:

  • 在项目pom.xml的build/plugins节点添加插件配置,绑定到generate-sources阶段:
<plugin>
  <groupId>io.github.yangziwen</groupId>
  <artifactId>freemarker-maven-plugin</artifactId>
  <version>1.0.1</version>
  <executions>
    <execution>
      <phase>generate-sources</phase>
      <goals>
        <goal>generate</goal>
      </goals>
      <configuration>
        <!-- ftl模板存放目录 -->
        <templateDirectory>${project.basedir}/src/main/resources/ftl</templateDirectory>
        <!--  json数据源文件路径 -->
        <dataModelFile>${project.basedir}/src/main/resources/data/source.json</dataModelFile>
        <!-- 生成txt的输出目录,建议放到target下避免污染源码 -->
        <outputDirectory>${project.build.directory}/generated-resources/txt</outputDirectory>
        <!-- 统一编码避免乱码 -->
        <encoding>UTF-8</encoding>
      </configuration>
    </execution>
  </executions>
</plugin>
  • 配置资源打包规则,将生成的txt文件打入最终程序包:
    如果输出目录设置为generated-resources下的子目录,大部分场景Maven会自动识别为资源目录,未自动识别的情况下添加如下配置即可:
<build>
  <resources>
    <!-- 原有资源配置保留 -->
    <resource>
      <directory>${project.basedir}/src/main/resources</directory>
    </resource>
    <!-- 新增生成文件的资源配置 -->
    <resource>
      <directory>${project.build.directory}/generated-resources/txt</directory>
      <!-- 可自定义txt在包里的存放路径,根目录填/,classes目录填BOOT-INF/classes即可 -->
      <targetPath>/</targetPath>
    </resource>
  </resources>
</build>
  • 执行mvn package时会自动先触发generate-sources阶段生成txt,再将其打进最终的jar/war包。

方案二:自定义Maven插件(适合有复杂定制逻辑的场景)

如果你现有的Java生成逻辑有特殊定制规则,通用插件无法满足,可以把现有逻辑改造为Maven插件:

  • 新建独立的Maven插件项目,打包类型设置为maven-plugin,引入maven-plugin-api和Freemarker相关依赖
  • 编写Mojo类,添加@Mojo(name = "generate-txt", defaultPhase = LifecyclePhase.GENERATE_SOURCES)注解,将你已有的生成逻辑放到Mojo的execute方法中,把模板路径、json路径、输出目录等参数用@Parameter注解做成可配置项
  • 将自定义插件发布到本地仓库或私服后,在业务项目的pom中引入插件并绑定到generate-sources阶段即可,后续打包规则和方案一一致。

注意事项

  • 所有生成的文件统一放到${project.build.directory}(即target目录)下,不要污染源码目录,符合Maven规范
  • 如果json数据源需要动态生成,可以在generate-sources阶段之前绑定其他任务生成json,再传递给Freemarker任务使用

内容的提问来源于stack exchange,提问作者PiotrekM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 15:45:01