Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
maven antrun插件从一个未知的子目录名复制文件_Maven_Ant_Maven Antrun Plugin - Fatal编程技术网

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

maven antrun插件从一个未知的子目录名复制文件,maven,ant,maven-antrun-plugin,Maven,Ant,Maven Antrun Plugin,我正在尝试使用maven-antrun插件将生成的.java文件复制到我当前的源目录。我的问题是生成了我要复制的路径目录的一部分 我要复制的路径如下所示: ${project.build.directory}/working/${project.artifactId}-${project.version}/ejbModule 从这一点开始,我想复制所有的.java文件及其子目录(以保持包的树) 请参阅我上面的插件配置: <plugin> <artifactId>m

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

我要复制的路径如下所示:

${project.build.directory}/working/${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>

有什么想法吗?

即时解决方案:将生成的目录名设置为属性

<fileset dir="${project.build.directory}/working/${generated.dir}/${project.artifactId}-${project.version}/ejbModule">
    <include name="**/*.java"/>
</fileset>
更新 如果生成的目录只有一个,您可以通过Ant中的一个简单程序获得其名称。我建议您将所有Ant内容放入
build.xml
文件:

<project basedir=".">
    <dirset id="dirs" dir="${project.build.directory}/working" includes="*" />
    <pathconvert pathsep="${line.separator}" property="generated.dir" refid="dirs">
        <chainedmapper>
            <mapper type="flatten" />
            <regexpmapper from="(.*)" to="\1" />
        </chainedmapper>
    </pathconvert>
    <echo>Moving stubs file from ${generated.dir} to source project.</echo>
    <copy todir="${project.build.sourceDirectory}">
        <fileset dir="${project.build.directory}/working/${generated.dir}/${project.artifactId}-${project.version}/ejbModule">
            <include name="**/*.java" />
        </fileset>
    </copy>
</project>

将存根文件从${generated.dir}移动到源项目。
然后,就从pom中调用它:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.8</version>
            <executions>
                <execution>
                    <id>ejbdeploy-copy</id>
                    <phase>verify</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                    <configuration>
                        <tasks>
                            <ant antfile="build.xml">
                            </ant>
                        </tasks>
                    </configuration>
                </execution>
            </executions>
        </plugin>

org.apache.maven.plugins
maven antrun插件
1.8
ejbdeploy拷贝
验证
跑

重要提示:尊重maven antrun插件的版本1.8

你的做法是错误的。你肯定不想将源文件复制到主源目录中。生成的文件永远不应该出现在
src/main/java
中。这是因为生成的代码不能进行版本控制;这些文件是e在构建过程中重新生成,因此应该始终位于Maven的构建目录中,默认情况下,该目录为
target

要将这些文件添加为源,而不是将其复制到主源目录中,您可以使用目标。这将添加指定的文件夹作为源目录。在这种情况下,您可以使用它并引用包含源的生成文件夹

诀窍是你不知道文件夹的路径。要解决这个问题,你可以利用。有了这个插件,你可以迭代给定目录的所有子目录;当前目录可以通过变量
@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>

com.soebes.maven.plugins
迭代器maven插件
0.4
生成源
迭代器
${project.build.directory}/working
org.codehaus.mojo
构建助手maven插件
1.12
添加源
${project.build.directory}/working/@item@/${project.artifactId}-${project.version}/ejbModule

验证
阶段复制源文件的目的是什么?要小心,因为这是一个非常老的项目。问题是我需要启动ejbdeploy为远程EJB(2.1)生成一些存根为此,我需要在我刚刚在模块的包阶段创建的jar上启动ejbdeploy命令。之后,我只能复制所有生成的.java文件。我只是被迫在包一之后的阶段插入插件。这就是为什么。这不是一个解决方案,因为我事先不知道生成的控制器的名称y、 Tunaki的观点得到了很好的理解:将生成的文件复制到
src
目录不是一个好的做法。因为在
编译
阶段之前,您不知道生成的目录的名称,所以不可能添加源目录或资源目录,您应该将生成的文件复制到
目标/类
目录中tead。这不是关于良好实践与否;我知道这是完全肮脏的,不应该做。这个项目已经有13年的历史了,到目前为止还没有Maven结构。一切都不能像我从一开始就做。无论如何,我选择放弃,因为Maven没有权利做任何事情来让RAD开心。我升级了我的vRAD的版本和所有东西现在都可以开箱即用。谢谢。我同意你的观点,但你的解决方案在这里对我不起作用。这是因为生成的源文件来自我刚构建的jar上启动的ejbdeploy命令。我被迫将它放在一个阶段后的包中。尽管如此,我还是要尝试你的解决方案。Eclipse成功了吗a随后将此文件夹添加到生成路径?@MadJlzz为什么要在包阶段添加源文件?当时,代码已经编译,因此不会考虑它们。生成源的
ejbdeploy
可执行文件也应该在
生成源
阶段启动。因为ejbdeploy可执行文件需要由我编译的源代码制成的jar来生成一个包含EJB远程存根的新jar。它们是用RMIC编译的,所以一切都很好。我正在尝试这样做,因为没有这些源文件,我无法正确使用我的应用程序。当我部署我的应用程序时,我需要将这些文件来源化,否则应用程序将无法正常工作全部。(我正在Websphere上使用RAD部署它。)这是因为RAD没有部署到我构建的最后一个耳朵,而是做了某种黑魔法来让事情有效。@ Majjrz我看到了。考虑制作一个多模块Maven项目,并有一个模块来封装运行<代码> EJBDebug 所需的jar。然后在另一个模块中,你可以依靠第一个模块,执行< c。ode>ejbdeploy在“生成源”阶段,并添加创建的源
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.8</version>
            <executions>
                <execution>
                    <id>ejbdeploy-copy</id>
                    <phase>verify</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                    <configuration>
                        <tasks>
                            <ant antfile="build.xml">
                            </ant>
                        </tasks>
                    </configuration>
                </execution>
            </executions>
        </plugin>
<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>