IDEA给我的groovy类警告`class“MyClassTest”已经存在于“my.class.package”中。在运行测试时,它似乎也没有很好地保持课程更新。我将添加一个保证失败的断言,或者成功,直到稍后才会识别它(后来到目前为止似乎是随意的)。鉴于我已经正确传递和运行maven测试,我怀疑这只是一个IDEA配置问题
这是我的pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xenoterracide</groupId>
<artifactId>rpf</artifactId>
<version>0.1.0</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.1.9.RELEASE</version>
</parent>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.gmavenplus</groupId>
<artifactId>gmavenplus-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<goals>
<goal>addSources</goal>
<goal>addTestSources</goal>
<goal>generateStubs</goal>
<goal>compile</goal>
<goal>testGenerateStubs</goal>
<goal>testCompile</goal>
<goal>removeStubs</goal>
<goal>removeTestStubs</goal>
</goals>
</execution>
</executions>
<configuration>
<testSources>
<testSource>
<directory>${project.basedir}/src/test/groovy</directory>
<includes>
<include>**/*.groovy</include>
</includes>
</testSource>
</testSources>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>1.8.0.DATAJPA-622-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!--
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
-->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.3-1102-jdbc41</version>
</dependency>
<dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.3.7</version>
<scope>test</scope>
</dependency>
</dependencies>
<properties>
<!-- use UTF-8 for everything -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<start-class>com.xenoterracide.rpf.Application</start-class>
<java.version>1.8</java.version>
</properties>
<repositories>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>http://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>spring-releases</id>
<url>http://repo.spring.io/libs-release</url>
</repository>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>http://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-releases</id>
<url>http://repo.spring.io/libs-release</url>
</pluginRepository>
</pluginRepositories>
</project>
答案 0 :(得分:10)
我通过将工件的target
文件夹标记为“已排除”来修复此问题。
我认为重复是由target/generated-sources/groovy-stubs
中生成的存根文件引起的。 IDEA必须对这些文件过于好奇,并可能将它们添加到源集中。
答案 1 :(得分:1)
我遇到了完全相同的问题,设置target
dir排除也没有帮助。我注意到目录:
/target/generated-sources/groovy-stubs/test
在IDEA中被设置为Sources Root
。我在UI中取消选中并且错误会消失,但是一旦我重建项目,它就会再次回到它。很沮丧。直到我开始查看所有gmavenplus-plugin执行目标。
事实证明我列出了太多目标。如果你只是使用groovy进行测试,就像我一样(使用Spock - 我已经完成了JUnit),你应该只在该插件下启用以下目标:
addTestSources
testGenerateStubs
testCompile
removeTestStubs
删除其余部分。一旦你这样做,IDEA应该对你的常规测试(或我的情况下的规范)都很好。如果真的有帮助,请告诉我。
答案 2 :(得分:0)
这是因为IntelliJ本质上知道groovy,你唯一要做的就是不要在IntelliJ中激活gmaveplus-plugin:
<profiles>
<profile>
<id>groovy-integration</id>
<!-- profile to incorporate gmaveplus in normal build -->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.gmavenplus</groupId>
<artifactId>gmavenplus-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<goals>
<goal>addSources</goal>
<goal>addTestSources</goal>
<goal>generateStubs</goal>
<goal>compile</goal>
<goal>testGenerateStubs</goal>
<goal>testCompile</goal>
<goal>removeStubs</goal>
<goal>removeTestStubs</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>development-in-idea</id>
<!-- suppress `groovy-integration` profile by default in IntelliJ -->
<activation>
<property>
<name>idea.version</name>
</property>
</activation>
</profile>
</profiles>
一方面,当您直接从IntelliJ IDEA的Maven Projects工具窗口运行maven目标时,groovy-integration
个人资料将不会像往常一样被激活。
但是,您始终可以导航到测试文件夹,单击“运行'测试'...''”并获得IntelliJ带给您的所有好处。
在IntelliJ IDEA中排除gmavenplus-plugin还有一个优点,IntelliJ IDEA有时会将生成的测试存根添加为Source而不是Test Sources,并且由于缺少测试范围的依赖项而无法编译它们。
答案 3 :(得分:0)
我也得到消息说我的groovy类已经存在。我发现它是在我第一次制作项目之后发生的。从那时起,总会发生该错误。如果您想摆脱错误,您所要做的就是删除存储在app / build / libs目录中的jar文件。当然,如果再次重新制作项目,则会出现错误。因此,通过在检测到错误时包含它自己的输出jar lib,可以绊倒自己。
我认为这只是一个令人讨厌的错误而且似乎并没有让事情变得混乱。当你没有任何错误时,获得错误指示肯定很烦人。也许有某种方法可以通过某种常规的lint选项来防止这种虚假错误等等;我只是不知道。我认为Michel排除某些文件(如输出lib文件)的解决方案是可行的。缺乏关于groovy和gradle构建的良好,可靠和一致的文档使我对想要解决这个问题不感兴趣;特别是因为它似乎只是一个令人讨厌的错误。
这里有一点点更新。我确实解决了这个问题,但我不确定你需要做什么来解决它。我能做的最好的事情就是解释我所痴迷的事情。我的解决方案似乎集中在"Class already exists" error in IntelliJ on Groovy class发布的解决方案。他们谈论从IntelliJ中排除文件。我使用的是Android Studio 3.1.3,但我无法找到一种方法来完成他们在该帖子中所说的内容。如果我进入项目选项卡并选择了项目文件,我就可以导航到我的构建文件夹。该目录已标记为已排除。我把它切换到被包含然后再被排除在外。这似乎没有解决问题。然后我注意到还可以加载/卸载模块。如果我在我的情况下卸载了应用程序&#39;模块并单击没关系,关于已经存在的类的错误总是如此。但是,类文件仍然认为它们是错误的。换句话说,选项卡中的类文件名仍然在其下方有一个曲线。但请注意,实际类文件中没有错误行。然后我玩了各种尝试卸载和加载执行它们的模块,这些模块位于目录文件结构中的各个其他位置并清理项目。最后,我只是将每个模块都加载到的状态。然后,我关闭了Android Studio项目并重新打开它。我注意到的是,在Project Files选项卡中,我无法再像以前那样看到或导航到构建目录。更重要的是,关于已经存在的类的错误消失了。所以我用的东西中的一些东西解决了这个问题,但是在我关闭Android Studio并重新启动它之前它并没有生效。在其他情况下,我注意到Android Studio需要关闭并重新启动以实际纠正自己。