我理解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标签吗?
答案 0 :(得分:1)
(您是否会考虑接受以前的一些问题,以便其他人更愿意回答您?)
Maven对Convention over Configuration的压力。您可以将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“灵活”。
答案 1 :(得分:1)
答案是:不,这不是灵活的。这是一个简单的任务,即使在这个世界的所有maven论坛的帮助下我都无法解决:写一个POM
使用其他一些Java文件编译其他目录。
NO WAY !
答案 2 :(得分:0)
通过将exec插件和编译器插件绑定到“生成源”,您可以在不编写插件的情况下完成此操作。或者&#39;流程类&#39;阶段。构建帮助程序插件也可用于添加源路径。
对于原始案例,您可以尝试以下绑定:
对于Hello World Mojo案例,如果将以下内容添加到流程类阶段(按顺序),该怎么办?
我能看到的唯一缺点是将重新编译第一个源目录。但编译器应该足够聪明,知道没有任何改变,以及它是否是一个问题取决于你为什么要这样做。在运行Hello World之前,为什么需要目录A中的类文件?也许您真正关注应该成为单独模块的两个独立代码片段?