当前位置: 首页 > 知识库问答 >
问题:

如何在maven中实现生成源代码的多个主类

谭思博
2023-03-14

如何在maven pom中做到这一点.xml当我在单个模块中运行mvn干净安装时?

  1. 编译主源代码
  2. 调用源代码中的主类,该源代码被编译以生成另一个源代码
  3. 组1和2并再次执行编译
  4. 在打包阶段,原始源代码和生成的源代码应该在jar中

共有2个答案

郜修雅
2023-03-14

我尝试并成功的解决方案之一。基本上,您在生成额外的java代码后强制再次调用maven编译器插件

<plugins>
           <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.6.0</version>
                <executions>
                    <execution>
                        <id>generate-code</id>
                        <phase>process-classes</phase>
                        <goals>
                            <goal>java</goal>
                        </goals>
                        <configuration>
                            <classpathScope>compile</classpathScope>
                            <mainClass>MyClassGenerator</mainClass>
                            <arguments>
                                <argument>${generated.code.dir}</argument>
                            </arguments>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>addtoSourceFolder</id>
                        <goals>
                            <goal>add-source</goal>
                        </goals>
                        <phase>process-classes</phase>
                        <configuration>
                            <sources>
                                <source>${generated.code.dir}</source>
                            </sources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <executions>
                    <execution>
                        <id>compile-generated-code</id>
                        <configuration>
                            <includes>**/*.java</includes>
                        </configuration>
                        <phase>process-classes</phase>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
张腾
2023-03-14

呃。你的任务对我来说似乎很奇怪。无论如何,你可以写一个脚本。我来自格拉德尔,但它类似于Maven,所以:创建一个任务构建管道

< code>buildPipeline依赖于< code>buildProjectA 、< code>buildProjectB和一个复制任务,例如< code>copySourceA。

  • 生成项目A 生成项目 A 的源代码。Maven/Gradle 只是查看源资源并以常规方式构建项目。
  • copySourceA 确保将您需要的代码库 A 复制到代码库 B,这在其他地方。复制源 A 依赖于生成项目 A
  • 最后,构建源代码B依赖于复制来源A(或必须运行之后),因此当构建源代码B被触发时,可以做出假设,即A被构建并且其源代码被复制。

如果你需要做其他的事情,比如执行一个脚本来运行/构建一些东西,你可以把复制任务换成其他的,Gradle能够调用可执行文件,我想Maven也可以。

最后,我要说两件事。到目前为止,我不明白你的意思。

在源代码中调用主类

如果有的话,我想你称之为JAR,它的主类是构建另一个项目的过程的切入点?…

尽管如此——对我来说,这听起来像是一个非常混乱的项目结构,所以也许你应该适当地重构代码。尤其是这是你以后要维持的。

 类似资料:
  • 我有一个Maven插件,它为我的java项目生成源代码,并将它们放在“target/generated sources”文件夹中。我在编译时需要这些源代码。我想在我的项目中有它们,同时修改它,已经生成。当然,我想把它们放在“src”文件夹下的正确文件夹中,而不是放在“target/generated sources”文件夹中。我如何使用Maven来组织它? 换句话说,我希望能够: > 通过运行我的

  • 我有一个由许多maven项目组成的应用程序。我在日蚀中工作。一些项目使用Maven插件为Web服务等生成存根类。 当我将项目导入到新的工作区时,我必须发出maven generate sources命令,然后附加源文件夹以在每个项目上构建路径。我处理的应用程序有5-6个以上的项目需要这些步骤。 是否有一个插件可以安装在Eclipse中以获取生成的源代码,或者甚至是一个生成源代码并更新构建路径以保存

  • 我还被告知要做的一件事是将带有Lombok注释的代码放在中,而不是放在中。我假设我保持了与中相同的包目录结构。 这看起来有点奇怪,但我这样做了,并且lombok生成了包含所有getter/setter/equals/hashcode等方法的源文件。它们被放置在例如中。这是我在使用其他代码生成工具(如XJC)后所期望的。 我的问题是:如何使生成的源代码对eclipse和编译环境“可见”?我到处都是编

  • 问题内容: 我正在忙于使用Maven将现有项目从Ant构建转换为Ant构建。该构建的一部分包括使用hibernate hbm2java工具将.hbm.xml文件的集合转换为Java。这是用于执行此操作的Ant脚本的片段: 我在互联网上四处张望,有些人(我认为)似乎在Maven中使用Ant,而另一些人使用Maven插件。我宁愿避免混合使用Ant和Maven。任何人都可以建议一种方法来执行此操作,以便

  • 我正在尝试从多个 WSDL 文件生成 Axis2 (v1.6.1) Web 服务客户端代码,以便我可以在单个项目中拥有多个 Web 服务客户端。我正在使用 Ant 通过代码生成任务生成源代码。 因此,我需要使用自定义命名空间来打包映射,以使每个 Web 服务客户端的代码与其他客户端的代码分开,以避免冲突。 下面是一个示例 WSDL 文件中的命名空间: 我已经设法将生成代码的主体放入适当的包中。我已

  • 我目前正在使用JavaCC(与JavaCC gradle插件从这里)来生成我的一些源代码。项目的其余部分依赖于这些代码。如果我将项目导入IDEA或者清理项目,那么我会得到错误,因为找不到类。然而,构建项目是可行的。 是否可以修改 gradle 文件,以便 IntelliJ(可能还有其他编辑器)在分析代码之前知道生成这些源代码? 生成的代码保存在src/gen/java/中,生成代码的位置通过以下方