Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.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
Java 如何使Maven只考虑编译时的一组重复文件中的一个?_Java_Maven_Swagger Codegen - Fatal编程技术网

Java 如何使Maven只考虑编译时的一组重复文件中的一个?

Java 如何使Maven只考虑编译时的一组重复文件中的一个?,java,maven,swagger-codegen,Java,Maven,Swagger Codegen,我正在使用Swagger(OpenAPI)来设计和实现一个API。我已经有了一个功能强大的swagger.yml和一个Maven项目,用于基于它构建文档、服务器和客户端 swagger-codegen-maven插件在/target/generated-sources/swagger目录中生成抽象类和实现类。我应该用自己的实现类覆盖实现类,所以我将实现类的初始版本移动到/src/main/java目录 移动类之后,我的构建正确完成,但是如果我执行mvn干净编译,我会因为构建中存在重复类而出错 每

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

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

移动类之后,我的构建正确完成,但是如果我执行
mvn干净编译
,我会因为构建中存在重复类而出错

每次我做一个干净的构建,
swagger codegen maven plugin
都会重新生成所有代码,包括我正在重写的类

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

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

<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>

org.apache.maven.plugins
maven编译器插件
3.6.0
1.7
1.7
编译
OrcamentoApiServiceImpl.java
PropostApiServiceImpl.java
<如何> <代码> Maven编译器插件< /> >忽略由Saviger-Maven插件生成的文件的版本,只考虑我的?


或者:你能建议一个替代解决方案,或者如何让
swagger-codegen-maven插件
考虑
。swagger-codegen-ignore

我遇到了完全相同的问题,并且我成功地使“大摇大摆”忽略文件起作用。根据我从他们的文档中了解到的情况(通过适当的示例可以更清楚地看到),ignore文件必须设置在生成代码的根目录下。因此,我在我的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>

maven资源插件
3.0.2
复制资源
验证
复制资源
${basedir}/target/generated sources/swagger
${basedir}/src/main/resources
.swagger codegen忽略

您的错误是将生成的源代码复制到项目的src/主文件夹中。你能把它清理干净吗?你试图忍受那个错误,这是在把自己弄得一团糟。在java中,您可以简单地
扩展
一个现有的类来覆盖它——您根本不需要实际更改现有的类。我理解这通常是一种不好的味道,但我不确定我是否可以遵循由swagger codegen生成的代码的建议。事实上,我还有一个悬而未决的问题,那就是如何对付斯威格·科德根。我知道您的解决方案将
.swagger codegen ignore
复制到构建开始时的正确位置,但是您的
maven codegen插件
是否确实忽略了其中列出的类的生成?我的不是。您使用的插件版本是什么?您的解决方案比我的更优雅,可以避免
clean
wipe
。swagger codegen ignore
(我对
maven clean plugin
使用了排除),但是
swagger codegen maven plugin
仍在生成
*Impl.java
文件。是的,不会生成impl类。我现在看不到这个文件,但是如果我没有错的话,我已经设置了
***Impl.java
,我会试试看!我没有包括任何路径,只有Java文件的全名。谢谢,@Xendar!使用
***Impl.java
做到了这一点。如果你创造一个答案,我会让它成为被接受的答案。
  <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>