Maven не будет компилировать классы в тестовой папке - PullRequest
1 голос
/ 10 апреля 2019

Я пытаюсь провести сквозной тест для компонента, который я разрабатываю с использованием Java. Итак, эти классы в test не являются модульными тестами, и я хочу запускать их только как обычный класс Java.

Мои источники находятся в папке src\main\java, а тесты - в src\test\java. В тесте есть два Java-класса, один является утилитарным классом, а другой расширяет класс в main, а также имеет метод main. В конечном итоге мне нужно запустить этот основной метод .

Я создал два файла pom, один для основного проекта и один для запуска теста. Единственным отличием в файле тестового pom было свойство mainClass. Когда у меня были тестовые классы внутри src\main\java, maven компилирует их и я смог запустить их без проблем .

Поскольку тестирование внутри папки src\main\java является плохой практикой, я хотел переместить ее в папку src\test\java. Но тогда это не работает. Он компилирует проект, но не компилирует тестовые классы (очевидно, потому что теперь он не внутри папки src\main\java). Поэтому я добавил test в область classpath в файле pom теста, как показано ниже.

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <configuration>
        <mainClass>com.my.company.project.MyTestClass</mainClass>
        <classpathScope>test</classpathScope>
    </configuration>
</plugin>

Но это не работает.

Итак, я попробовал решение , предоставленное самим Maven, но оно то же самое. Он создает файл jar с моим тестовым классом в качестве основного класса в файле манифеста. Но в jar-файле нет ни одного такого класса, ни классов из main. И я получаю следующую ошибку при запуске файла JAR.

Could not find or load main class com.my.company.project.MyTestClass

Моя конечная цель - иметь возможность скомпилировать и запустить мой тестовый класс (для тестирования основного класса), используя maven.

Можете ли вы предложить мне способ достижения этого?

EDIT:

pom.xml

<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>com.my.company</groupId>
    <artifactId>my-artifact</artifactId>
    <version>1.0.0</version>
    <packaging>jar</packaging>

    <properties>
        ...
    </properties>

    <developers>
        ...
    </developers>

    <dependencies>
       ...
    </dependencies>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>exec-maven-plugin</artifactId>
                    <version>1.6.0</version>
                </plugin>
                ...
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.22.1</version>
                </plugin>
            </plugins>
        </pluginManagement>
        <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <configuration>
                <mainClass>com.my.company.project.MyClass</mainClass>
                <classpathScope>test</classpathScope>
            </configuration>
        </plugin>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>com.my.company.project.MyClass</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <appendAssemblyId>false</appendAssemblyId>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <compilerArgs>
                        <arg>-verbose</arg>
                        <arg>-Xlint:all,-options,-path</arg>
                    </compilerArgs>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.1.1</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>test-jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

РЕДАКТИРОВАТЬ 2:

Согласно комментарию @notionquest, я обновил файл POM. Теперь тестовые классы компилируются, но не доступны внутри файла jar. Таким образом, это все еще дает мне ошибку:

Error: Could not find or load main class com.trivago.visual.debezium.test.ChangeDataCaptureSenderTest
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...