4

我有一个包含令牌列表的文件:

令牌.txt

foo
bar
baz

和一个模板文件:

模板.txt

public class @token@MyInterface implements MyInterface {
     public void doStuff() {
        // First line of generated code
        // Second line of generated code
     }
}

我想生成以下源代码文件target/generated-sources/my/package

  • FooMyInterface.java
  • BarMyInterface.java
  • BazMyInterface.java

生成的源文件之一如下所示:

FooMyInterface.java

public class FooMyInterface implements MyInterface {
     public void doStuff() {
        // First line of generated code
        // Second line of generated code
     }
}

我怎样才能用 Maven 做到这一点?

4

1 回答 1

1

您要执行的操作称为过滤。 你可以在这里读更多关于它的内容。 如您所见,您必须改变做某些事情的方式。变量的定义不同。您需要将文件重命名为 .java。

但是你遇到了另一个问题:这将获取一个源文件并用文字替换变量,但是当你构建你的项目时它不会为你编译 .java 文件。假设你想这样做,这里有一个关于如何做的教程。 我将内联该教程的一些内容,以防它有一天消失:

示例源文件:

public static final String DOMAIN = "${pom.groupId}";
public static final String WCB_ID = "${pom.artifactId}";

过滤:

<project...>
  ...
  <build>
    ...
    <!-- Configure the source files as resources to be filtered
      into a custom target directory -->
    <resources>
      <resource>
        <directory>src/main/java</directory>
        <filtering>true</filtering>
        <targetPath>../filtered-sources/java</targetPath>
      </resource>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
      </resource>
    </resources>
  ...
  </build>
...
</project>

现在更改 maven 找到要编译的源文件的目录:

<project...>
  ...
  <build>
    ...
      <!-- Overrule the default pom source directory to match
            our generated sources so the compiler will pick them up -->
      <sourceDirectory>target/filtered-sources/java</sourceDirectory>
  ...
  </build>
...
</project>
于 2013-05-10T07:07:03.707 回答