Плагин Maven exec не может зависеть от зависимости? - PullRequest
4 голосов
/ 21 июня 2011

В моем POM у меня есть эта зависимость

<dependencies>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>0.10.0-RC1</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

Теперь я пытаюсь использовать это в плагине Maven exec следующим образом:

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.2</version>
            <executions>
                <execution>
                    <id>delombok-source</id>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>exec</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <executable>java</executable>
                <arguments>
                    <argument>-classpath</argument>
                    <classpath>
                        <dependency>org.projectlombok:lombok</dependency>
                    </classpath>
                    <argument>lombok.core.Main</argument>
                    <argument>delombok</argument>
                    <argument>src/main/java</argument>
                    <argument>-d</argument>
                    <argument>target/src-delomboked</argument>
                </arguments>
            </configuration>
        </plugin>

Но каждый раз, когда я выполняю exec:exec, я получаю ошибку «java.lang.NoClassDefFoundError: lombok / core / Main».Некоторое тестирование показало, что это потому, что зависимость объявлена ​​в предоставленной области действия

Почему плагин exec не может использовать предоставленные зависимости?Во-вторых, может ли плагин exec использовать эту зависимость, не изменяя область действия зависимости?

Ответы [ 3 ]

7 голосов
/ 21 июня 2011

Узнал ответ позже: просто добавь это в свой конфиг

<classpathScope>compile</classpathScope>

Оглядываясь назад, это имеет смысл, поскольку lombok - это процессор аннотаций времени компиляции, а не зависимость во время выполнения.

2 голосов
/ 16 апреля 2013

Если кому-то интересно, как это сделать без изменения pom, вы можете добавить в команду следующую опцию: -Dexec.classpathScope="compile"

Например, я использую:

mvn compile exec:java -Dexec.mainClass="my.package.MyMainClass" -Dexec.classpathScope="compile"
1 голос
/ 15 сентября 2011

Вас может заинтересовать lombok-maven-plugin , вместо того, чтобы пытаться использовать exec-maven-plugin.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...