简体   繁体   English

Maven 在使用测试 scope 时无法编译测试类

[英]Maven cant compile test-classes when using test scope

I am currently trying to use MockBukkit for testing my Minecraft Plugin and included it in my pom with the test scope because I will only need it for that.我目前正在尝试使用MockBukkit来测试我的 Minecraft 插件,并将它包含在我的 pom 中并通过测试 scope 因为我只需要它。 The problem is however that when using the test scope, the dependency appears in my local repository but cannot be resolved by eclipse or Maven.然而问题是,当使用测试 scope 时,依赖项出现在我的本地存储库中,但无法通过 eclipse 或 Maven 解决。

The problem appears to be that the default-compile goal from the compiler plugin tries to compile the test classes even though it cannot use the dependencies as they are only available during the testing phase.问题似乎是编译器插件的默认编译目标试图编译测试类,即使它不能使用依赖项,因为它们仅在测试阶段可用。 (However that is only my guess). (但这只是我的猜测)。

Maven output: Maven output:

[INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ CityCraft ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 32 source files to C:\Users\lptoa\Desktop\MC Plugins\CityCraft\target\classes
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /C:/Users/lptoa/Desktop/MC Plugins/CityCraft/src/test/java/skyvide/de/city/CityTests.java:[3,32] package be.seeseemelk.mockbukkit does not exist
[ERROR] /C:/Users/lptoa/Desktop/MC Plugins/CityCraft/src/test/java/skyvide/de/city/CityTests.java:[4,32] package be.seeseemelk.mockbukkit does not exist
[ERROR] /C:/Users/lptoa/Desktop/MC Plugins/CityCraft/src/test/java/skyvide/de/city/CityTests.java:[9,17] cannot find symbol
  symbol:   class ServerMock
  location: class test.java.skyvide.de.city.CityTests
[ERROR] /C:/Users/lptoa/Desktop/MC Plugins/CityCraft/src/test/java/skyvide/de/city/CityTests.java:[12,10] cannot find symbol
  symbol:   class Before
  location: class test.java.skyvide.de.city.CityTests
[ERROR] /C:/Users/lptoa/Desktop/MC Plugins/CityCraft/src/test/java/skyvide/de/city/CityTests.java:[19,10] cannot find symbol
  symbol:   class After
  location: class test.java.skyvide.de.city.CityTests
[ERROR] /C:/Users/lptoa/Desktop/MC Plugins/CityCraft/src/test/java/skyvide/de/city/CityTests.java:[15,22] cannot find symbol
  symbol:   variable MockBukkit
  location: class test.java.skyvide.de.city.CityTests
[ERROR] /C:/Users/lptoa/Desktop/MC Plugins/CityCraft/src/test/java/skyvide/de/city/CityTests.java:[16,34] cannot find symbol
  symbol:   variable MockBukkit
  location: class test.java.skyvide.de.city.CityTests
[ERROR] /C:/Users/lptoa/Desktop/MC Plugins/CityCraft/src/test/java/skyvide/de/city/CityTests.java:[22,13] cannot find symbol
  symbol:   variable MockBukkit
  location: class test.java.skyvide.de.city.CityTests

Location:地点:

->src
 --->test
    --->java
      --->example
        --->ExampleTest.java

Code:代码:

package test.java.example;

import be.seeseemelk.mockbukkit.MockBukkit;
import be.seeseemelk.mockbukkit.ServerMock;
import main.plugin;

public class ExampleTest {
    
    private ServerMock server;
    private Plugin plugin;

    @Before
    public void setUp()
    {
        server = MockBukkit.mock();
        plugin = (Plugin) MockBukkit.load(Plugin.class);
    }

    @After
    public void tearDown()
    {
        MockBukkit.unmock();
    }
}

POM:聚甲醛:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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>sv-plugins</groupId>
  <artifactId>CityCraft</artifactId>
  <version>1.0</version>
  <properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <profiles>
    <profile>
        <id>testing</id>
        <activation>
            <property>
                <name>test.output.dir</name>
            </property>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>2.3.1</version>
                    <configuration>
                      <outputDirectory>${test.output.dir}</outputDirectory>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>
  </profiles>
  <repositories>
    <repository>
        <id>papermc</id>
        <url>https://papermc.io/repo/repository/maven-public/</url>
    </repository>
    <repository>
        <id>spigot-repo</id>
        <url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
    </repository>
    <repository>
        <id>everything</id>
        <url>https://repo.citizensnpcs.co/</url>
    </repository>
    <repository>
        <id>jitpack.io</id>
        <url>https://jitpack.io</url>
    </repository>
    <repository>
        <id>aikar</id>
        <url>https://repo.aikar.co/content/groups/aikar/</url>
    </repository>
  </repositories>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.0</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
      <plugin>
      <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>2.3</version>
        <executions>
            <execution>
                <phase>package</phase>
                <goals>
                    <goal>shade</goal>
                </goals>
                <configuration>
                    <artifactSet>
                        <includes>
                            <include>com.github.WesJD.AnvilGUI:anvilgui</include>
                            <include>co.aikar:acf-paper</include>
                        </includes>
                    </artifactSet>
                </configuration>
            </execution>
        </executions>
      </plugin>
    </plugins>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
        </resource>
    </resources>
  </build>
  <dependencies>
  <dependency>
    <groupId>com.destroystokyo.paper</groupId>
    <artifactId>paper-api</artifactId>
    <version>1.15.2-R0.1-SNAPSHOT</version>
    <scope>provided</scope>
 </dependency>
  <dependency>
    <groupId>net.citizensnpcs</groupId>
    <artifactId>citizens</artifactId>
    <version>2.0.27-SNAPSHOT</version>
    <type>pom</type>
    <scope>provided</scope>
  </dependency>
  <dependency>
    <groupId>sv-plugins</groupId>
    <artifactId>MySQL</artifactId>
    <version>1.0</version>
    <scope>provided</scope>
  </dependency>
  <dependency>
    <groupId>sv-plugins</groupId>
    <artifactId>Clouds</artifactId>
    <version>1.0</version>
    <scope>provided</scope>
  </dependency>
  <dependency>
    <groupId>com.github.WesJD.AnvilGUI</groupId>
    <artifactId>anvilgui</artifactId>
    <version>master-SNAPSHOT</version>
  </dependency>
  <dependency>
    <groupId>co.aikar</groupId>
    <artifactId>acf-paper</artifactId>
    <version>0.5.0-SNAPSHOT</version>
  </dependency>
  <dependency>
    <groupId>com.github.seeseemelk</groupId>
    <artifactId>MockBukkit-v1.16</artifactId>
    <version>0.5.0</version>
    <scope>test</scope>
  </dependency>
  </dependencies>
</project>

Okay, the error was just that I had to change the.classpath because I just converted a default eclipse project to a Maven project, so I had to remove the default src folder in the Build Path and add the different Maven ones.好的,错误只是我必须更改.classpath,因为我刚刚将默认的 eclipse 项目转换为 Maven 项目,所以我不得不删除构建路径中的默认 src 文件夹并添加不同的 Z91175C109804AC13777F744C 文件夹。 Without it, Maven tried to compile every class as a normal one and not as tests which made them fail.没有它,Maven 试图将每个 class 编译为正常的,而不是作为使它们失败的测试。

In case anyone's interested, here is a comparision between the two.classpath files:如果有人感兴趣,这里是两个.classpath 文件之间的比较:

Old:老的:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
        <attributes>
            <attribute name="module" value="true"/>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry including="**/*.java" kind="src" output="target/classes" path="src">
        <attributes>
            <attribute name="optional" value="true"/>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
        <attributes>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="output" path="target/classes"/>
</classpath>

New:新的:

<classpath>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
        <attributes>
            <attribute name="module" value="true"/>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="src" path="src/main/java"/>
    <classpathentry kind="src" output="target/test-classes" path="src/test/java">
        <attributes>
            <attribute name="test" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="src" path="src/main/resources"/>
    <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
        <attributes>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="output" path="target/classes"/>
</classpath>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM