maven-antrun-plugin 从一个未知的子目录名称复制文件

标签 maven ant maven-antrun-plugin

我正在尝试使用 maven-antrun-plugin复制生成的.java文件到我当前的源目录。我的问题是生成了我要复制的路径目录的一部分。

我要复制的路径是这样的:

${project.build.directory}/working/<GENERATED_DIRECTORY_I_DONT_KNOW_THE_NAME>/${project.artifactId}-${project.version}/ejbModule

从这一点开始,我想复制所有 .java 文件及其子目录(以保留包的树。

看我上面的插件配置:

<plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <executions>
        <execution>
            <id>ejbdeploy-copy</id>
            <phase>verify</phase>
            <goals>
                <goal>run</goal>
            </goals>
            <configuration>
                <tasks>
                    <echo>Moving stubs file to source project.</echo>
                    <copy todir="${project.build.sourceDirectory}">
                        <fileset dir="${project.build.directory}/working/**/${project.artifactId}-${project.version}/ejbModule">
                            <include name="**/*.java"/>
                        </fileset>
                    </copy>
                </tasks>
            </configuration>
        </execution>
    </executions>
</plugin>

问题是 maven-antrun-plugin 无法转换我的 **到生成的目录名称。

我尝试过这种配置,但没有成功:

<plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <executions>
        <execution>
            <id>ejbdeploy-copy</id>
            <phase>verify</phase>
            <goals>
                <goal>run</goal>
            </goals>
            <configuration>
                <tasks>
                    <echo>Moving stubs file to source project.</echo>
                    <copy todir="${project.build.sourceDirectory}">
                        <fileset dir="${project.build.directory}">
                            <include name="**/*.java"/>
                            <exclude name="**/ejbModule/"/>
                        </fileset>
                    </copy>
                </tasks>
            </configuration>
        </execution>
    </executions>
</plugin>

有什么想法吗?

最佳答案

你走错了路。您绝对不想将源文件复制到主源目录中。生成的文件永远不应在 src/main/java 中结束。这是因为生成的代码不能受版本控制;这些是在构建过程中重新生成的文件,因此应该始终位于 Maven 的构建目录中,默认情况下是 target

要将这些文件添加为源,而不是将它们复制到主源目录,您可以使用 build-helper-maven-plugin:add-source目标。这将添加一个指定的文件夹作为源目录。在这种情况下,您可以使用它并引用包含您的源代码的生成文件夹。

诀窍在于您不知道文件夹的路径。要解决这个问题,您可以使用 iterator-maven-plugin .使用此插件,您可以遍历给定目录的所有子目录;当前目录可以通过变量@item@获取。这样,配置就目录名称而言是动态的。

<plugin>
  <groupId>com.soebes.maven.plugins</groupId>
  <artifactId>iterator-maven-plugin</artifactId>
  <version>0.4</version>
  <executions>
    <execution>
      <phase>generate-sources</phase>
      <goals>
        <goal>iterator</goal>
      </goals>
      <configuration>
        <folder>${project.build.directory}/working</folder>
        <pluginExecutors>
          <pluginExecutor>
            <plugin>
              <groupId>org.codehaus.mojo</groupId>
              <artifactId>build-helper-maven-plugin</artifactId>
              <version>1.12</version>
            </plugin>
            <goal>add-source</goal>
            <configuration>
              <sources>
                <source>${project.build.directory}/working/@item@/${project.artifactId}-${project.version}/ejbModule</source>
              </sources>
            </configuration>
          </pluginExecutor>
        </pluginExecutors>
      </configuration>
    </execution>
  </executions>
</plugin>

关于maven-antrun-plugin 从一个未知的子目录名称复制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39448399/

相关文章:

eclipse - 无法计算构建计划:artifact org. apache.maven.plugins :maven-resources-plugin:pom:2. 4.3在本地存储库中不可用

eclipse - 我想将 maven 用于 GAE 项目,我该怎么做?

windows - ANT 脚本不工作

java - 当我运行 Ant 构建时,MyEclipse 正在格式化我的 Java 代码

ant - 如何在 Gradle JAXB/XJC 中编译多个 xsd 文件?

java - Mac OSX 上 Java 10 辅助启动器的替代方案是什么?

javascript - 在 Maven 中编写脚本来设置项目属性

Maven 找不到依赖项 [dependencyResolutionException]

maven - 如何为maven antrun插件设置ANT_OPTS

maven - 在 Maven 中包装 Ant - JAVA_HOME 指向 JRE,但仅适用于 Ant