当前位置: 首页 > 面试题库 >

maven:如何添加在编译阶段之后生成的资源

井浩思
2023-03-14
问题内容

我有一个maven项目,该项目使用wsgen从已编译的Java类生成XSD文件。

问题是我想将生成的文件作为资源添加到jar中。但是由于该resource阶段在该process-classes阶段之前运行,所以无法添加它们。

有没有办法告诉Maven添加在该process-classes阶段生成的其他资源?


问题答案:

我建议将XSD文件的输出目录定义为target /
classs(可能带有一个补充子文件夹,该子文件夹稍后将在打包阶段打包到jar中。这可以通过使用maven-resources-
plugin
来实现。

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-resources-plugin</artifactId>
        <version>3.0.2</version>
        <executions>
          <execution>
            <id>copy-resources</id>
            <phase>process-classes</phase>
            <goals>
              <goal>copy-resources</goal>
            </goals>
            <configuration>
              <outputDirectory>${project.build.outputDirectory}</outputDirectory>
              <resources>          
                <resource>
                  <directory>${basedir}/target/xsd-out</directory>
                  <filtering>false</filtering>
                </resource>
              </resources>              
            </configuration>            
          </execution>
        </executions>
      </plugin>
    </plugins>
    ...
  </build>
  ...
</project>

您需要注意资源插件位于用于调用wsgen部分的插件之后。您也可以使用 prepare-package 阶段来确保将资源正确打包。



 类似资料:
  • 我使用kapt编写了一个代码生成器,并在使用maven编译kotlin的项目中使用它。 我发现kapt生成器是在Kotlin的编译阶段之后调用的,这使得我无法在同一个项目中使用kotlin中生成的代码。 然而,如果我在同一个项目中引用Java内部生成的类,它就能很好地工作。这是因为java编译阶段在kotlin的生成阶段之后。 我已经在maven配置中指定了静态编程语言编译目标之前的kapt目标(

  • 我在单元测试用例中使用Mockito和Power Mockito。当我运行配置文件代码时,我能够生成jacoco报告,但是 当我在测试阶段试图生成Jacoco报告时,我遇到了错误 错误[错误]无法执行目标组织。jacoco:jacoco maven插件:0.8.2:project testproject api上的报告(默认报告):生成jacoco报告时出错:创建报告时出错:分析d:\worksp

  • 我正在与Maven一起构建一个GWT项目。我为gwt编译添加了gwt maven插件,如下所示: 我在executions标签下包含了编译目标,希望在编译阶段执行GWT编译。但GWT编译仅在包阶段或运行mvn package命令时执行 即使为gwt-dev依赖项设置了提供的作用域,我也会收到如下所示的警告。 1) 为什么在编译阶段不执行GWT编译 2)我应该为GWT(GWT用户、GWT开发人员)依

  • 项目无法执行maven生命周期映射的两个生命周期阶段: null

  • 我已经用maven创建了一个java项目。在我的项目(src/main/resources下)中,有一些资源文件我想复制到目标/类中。 我在pom xml中添加了以下行: 当我运行mvn资源时:通过命令行获取的资源文件正在复制到目标/类中(因此生命周期中的资源阶段正在工作)。然而,当我在cmd中输入mvn install:install时,资源文件并没有被复制到目标/类中。 我得到: 生命周期中的

  • 我有一个项目,它使用编译的方面并在编译时编织它们。我想添加Lombok,但不幸的是,Lombok不支持AJC。由于该项目本身没有任何方面的源代码,因此在使用Javac Lombok编译之后,我将AspectJ Maven插件配置为进行编译后编织。 以下是AspectJ Maven插件的配置: 它在Maven编译器插件编译后立即附加到编译阶段。这样Lombok Javac将首先被调用,然后AJC将对