3

我正在使用 Swagger (OpenAPI) 来设计和实现 API。我已经有一个功能性的 swagger.yml 和一个 Maven 项目集来基于它构建文档、服务器和客户端。

在目录swagger-codegen-maven-plugin中生成抽象类和实现类/target/generated-sources/swagger。我应该用我自己的覆盖实现类,所以我将实现类的初始版本移动到/src/main/java目录中。

移动类后,我的构建正确完成,但如果我这样做,mvn clean compile我会因为构建中有重复的类而出错。

发生的情况是,每次我进行干净的构建时,swagger-codegen-maven-plugin都会重新生成所有代码,包括我正在重写的类。

swagger-codegen-maven-plugin创建一个.swagger-codegen-ignore我应该列出我不希望它生成的文件的位置,但它似乎不起作用(我使用的是插件的 2.2.2-SNAPSHOT 版本)。

#.swagger-codegen-ignore
OrcamentoApiServiceImpl.java
PropostaApiServiceImpl.java

作为一种解决方法,我试图maven-compiler-plugin排除生成的文件版本,以便只有我修改后的实现将用于编译,但它也不起作用。这是我正在使用的配置:

<build> 
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.6.0</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>compile</goal>
                    </goals>
                    <configuration>
                        <excludes>
                            <exclude>OrcamentoApiServiceImpl.java</exclude>
                            <exclude>PropostaApiServiceImpl.java</exclude>
                        </excludes>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

我怎样才能maven-compiler-plugin忽略 swagger Maven 插件生成的文件版本,只考虑我的?

或者:您能否提出替代解决方案,或者如何swagger-codegen-maven-plugin考虑.swagger-codegen-ignore

4

1 回答 1

1

我遇到了完全相同的问题,我设法让招摇忽略文件工作。根据我从他们的文档中了解到的(通过适当的示例可能会更清楚),必须将忽略文件设置在生成代码的根目录中。所以我在我的 pom.xml 中添加了这个插件,以便从它的实际位置复制它:

  <plugin>
    <artifactId>maven-resources-plugin</artifactId>
    <version>3.0.2</version>
    <executions>
      <execution>
        <id>copy-resources</id>
        <phase>validate</phase>
        <goals>
          <goal>copy-resources</goal>
        </goals>
        <configuration>
          <outputDirectory>${basedir}/target/generated-sources/swagger</outputDirectory>
          <resources>
            <resource>
              <directory>${basedir}/src/main/resources</directory>
              <includes>
                <include>.swagger-codegen-ignore</include>
              </includes>
            </resource>
          </resources>
        </configuration>
      </execution>
    </executions>
  </plugin>
于 2016-12-23T19:54:22.633 回答