-1

我了解 Maven 如何处理 src/java/main 中的 .java 文件。但它可以用于更一般的情况吗?让我们更抽象一点:假设我已经有一些 a.exe 从目录 A1、A2、A3 读取一些(不一定只有 .java)源,并将一些文件(可能有些是生成的 .java)放到目录 B1、B2 . 我还有一些 b.exe 当前从 B1、B2、B3 读取文件并生成其他内容。一些类似的步骤。(一个现实生活中的问题就在后面)。

我想编写一个 POM.xml 文件,以便 maven 完成这项工作。那可能吗?我认为 a.exe 和 b.exe 应该被扭曲为 maven 插件。接下来,在 Maven 文档中,我看到:

<build>
    <sourceDirectory>${basedir}/src/main/java</sourceDirectory>
    <scriptSourceDirectory>${basedir}/src/main/scripts</scriptSourceDirectory>
    <testSourceDirectory>${basedir}/src/test/java</testSourceDirectory>
    <outputDirectory>${basedir}/target/classes</outputDirectory>
    <testOutputDirectory>${basedir}/target/test-classes</testOutputDirectory>
    ...
</build>

困扰我的是“sourceDirectory”本身看起来是一个硬编码的名称。Maven 会接受 A1 和 A2 标签吗?

4

3 回答 3

1

(你会考虑接受你之前的一些问题,让其他人更愿意回答你吗?)

Maven 强调约定优于配置。您可以将sourceDirectory其视为约定之一,我们已经预定义了一些要与 (Java) 编译器插件一起使用的元素。

你想做的事都能实现。您可以自己编写一个插件/MOJO,它可以从您想要的任何目录读取并调用您想要的任何外部 exe。通过在你的 MOJO 中设置合理的默认值,你可以让你的项目 POM 看起来像

<project>
  :
  :
  <build>
    <plugins>
      <plugin>
        <groupId>yourPluginGroup</group>
        <artifactId>generate-A-data</artifactId>
        <!-- if you want extra configuration, you can have <configuration> elements -->
      </plugin>

      <plugin>
        <groupId>yourPluginGroup</group>
        <artifactId>generate-B-data</artifactId>
      </plugin>
    </plugins>
  </build>
<project>

没那么糟糕吧?

但是,要说 Maven 是否“灵活”,还是很值得商榷的。我相信灵活性从来都不是 Maven 的目标。Maven 专门用于构建,它定义了不同的骨架供您遵循(例如构建阶段、依赖范围),您永远无法使 Maven 像 Ant 等其他基于脚本的工具那样“灵活”。

于 2012-10-09T03:49:51.997 回答
1

答案是:不,Maven 不灵活。这是一个即使在世界上所有 maven 论坛的帮助下我也无法解决的简单任务:编写一个 POM

  1. 编译一些包含 Java 文件的目录
  2. 做其他事情(如果你愿意 - 执行一个示例 Hello World Mojo 插件)
  3. 用一些其他 Java 文件编译其他目录。

     NO WAY !
    
于 2012-11-07T01:13:00.260 回答
0

通过将 exec 插件和编译器插件绑定到“generate-sources”或“process-classes”阶段,您可以在不编写插件的情况下做到这一点。构建助手插件也可能对添加源路径有用。

对于原始情况,您可以尝试以下绑定:

  • build-helper-maven-plugin 绑定到初始化阶段,添加任何必要的源目录(例如 B1 和 B2)
  • exec-maven-plugin 绑定到 generate-sources 阶段,有两次执行,一次用于 a.exe,一次​​用于 b.exe

对于 Hello World Mojo 案例,如果将以下内容添加到流程类阶段(按顺序)会怎样?

  • Hello World Mojo 插件
  • 构建 Helper 插件以添加源目录
  • 编译器插件

我能看到的唯一缺点是第一个源目录将被重新编译。但是编译器应该足够聪明,知道什么都没有改变,这是否是一个问题取决于你为什么要这样做。为什么在运行 Hello World 之前需要目录 A 中的类文件?也许您真的在看应该成为独立模块的两段独立代码?

于 2014-12-15T03:21:31.587 回答