Два одинаковых класса в maven зависимостях. нарушение герметизации - PullRequest
0 голосов
/ 03 февраля 2020

сегодня я столкнулся с необычной ситуацией .. Для тестирования Java EE я собираюсь использовать glassfi sh -embedded-all. В производстве я собираюсь использовать базу данных apache derby. Поэтому, когда я написал небольшой тестовый класс для тестирования БД, я получил эту ошибку:

java.lang.SecurityException: sealing violation: can't seal package org.apache.derby.impl.services.locks: already loaded

Мой pom:

  <dependencies>
        <dependency>
            <groupId>org.apache.derby</groupId>
            <artifactId>derby</artifactId>
            <version>10.14.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.derby</groupId>
            <artifactId>derbynet</artifactId>
            <version>10.14.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.derby</groupId>
            <artifactId>derbyclient</artifactId>
            <version>10.14.2.0</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.glassfish.main.extras</groupId>
            <artifactId>glassfish-embedded-all</artifactId>
            <version>3.1.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>6.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

Проблема в том, что встроенный сервер также имеет занятия дерби. Так что у меня есть классы дерви для компиляции, и я классифицировал дерби для тестов. И во время теста Это вызывает конфликт, который я не знаю, как решить.

Кажется, мне нужно игнорировать классы вывода во встроенном сервере во время теста. Есть идеи?

Мои тесты:

public class JpaTest {
    private static final String PERSISTENCE_UNIT_NAME = "people";
    private EntityManagerFactory factory;

    @Before
    public void setUp() throws Exception {
        factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);

        // Error appear here
        EntityManager em = factory.createEntityManager();


PS Я не могу понять, как работают плагины Maven. Кажется, этот плагин предназначен для финальной банки. Не для модульного теста сейчас ...

PS2. Если я пытаюсь выполнить тест в каком-то методе Main, он работает нормально (потому что нет зависимости от glassfi sh)

1 Ответ

1 голос
/ 03 февраля 2020

Если я не помню неправильно, область компиляции maven используется на каждом этапе жизненного цикла, поэтому зависимости с областью компиляции также используются на этапе тестирования. Решение утверждает, что исключает зависимости derby из glassfi sh one, чтобы заставить использовать вашу.

Более того, у вас есть зависимости с явной областью действия, определенной как compile , и другие, чем ничего указано ... то же самое, поскольку maven принимает в качестве области по умолчанию compile one

...