Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.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项目复制java源文件并修改其包声明_Maven_Maven 3 - Fatal编程技术网

从不同的maven项目复制java源文件并修改其包声明

从不同的maven项目复制java源文件并修改其包声明,maven,maven-3,Maven,Maven 3,假设我们有两个不同的maven项目;项目A和项目B 项目B使用A并需要动态(使用maven pluggins?)从项目A复制源文件“A.java”,修改其包声明并编译它(项目B应具有与项目A相同的类,但具有其他包声明..) 在修改包声明和编译所有文件之前,我试图将源文件从A复制到B 这是好办法吗 因此,项目A将其java文件公开为资源 <build> <resources> <resource> <directory>src

假设我们有两个不同的maven项目;项目A和项目B

项目B使用A并需要动态(使用maven pluggins?)从项目A复制源文件“A.java”,修改其包声明并编译它(项目B应具有与项目A相同的类,但具有其他包声明..)

在修改包声明和编译所有文件之前,我试图将源文件从A复制到B

这是好办法吗

因此,项目A将其java文件公开为资源

<build>
  <resources>
    <resource>
      <directory>src/</directory>
      <includes>
    <include>**/A.java</include>
      </includes>
    </resource>
  </resources>
</build>

src/
**/A.java
但是如何将此文件复制到B(B是a中的依赖项)?“maven resources plugin”是否允许从依赖项项目复制资源,如果是,如何在“resource”中指定属性“directory” 我试图在jar依赖项中指定文件的位置,但没有成功

你还有其他主张吗


感谢

maven resources插件使您能够在编译之前将java源代码复制到任何地方(您可以初始化阶段),但问题在于java文件中的包声明。您还需要修改它,这在maven中并不简单


但你为什么要这么做呢?为什么需要在两个不同的包中使用相同的代码???

最后,我通过以下步骤解决了这个问题:

1-使用“maven dependency plugin”提取(解包)我想要的(jar中的源文件)包含的工件

2-使用“maven antrun插件”执行ant命令,替换字符串,创建新包并移动修改的源。。 看

3-使用“build helper maven plugin”将编译器指向新的源代码包,以便在编译阶段包含它们


PS:这三个步骤必须发生在“生成源”阶段

我不认为在maven中有一种简单的方法可以做到这一点,但我在其他项目中见过使用ant实现这一点。您可以创建一个ant脚本来实现这一点(这解释了您需要运行哪些ant任务),然后您可以使用maven antrun插件从maven运行ant脚本,这对我很有帮助:)