Плагин Maven exec - как включить "системный" путь к классам? - PullRequest
15 голосов
/ 13 марта 2011

У меня есть проект, который использует «системную» область для указания файла jar, включенного в каталог WEB-INF/lib моего проекта.Этот артефакт отсутствует ни в одном из репозиториев Maven, поэтому я должен включить его в свой проект.Я делаю это со следующим:

    <dependency>
        <groupId>com.example</groupId>
        <artifactId>MySpecialLib</artifactId>
        <version>1.2</version>
        <scope>system</scope>
        <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/MySpecialLib-1.2.jar</systemPath>
    </dependency>

Это прекрасно работает для большинства вещей.

Но теперь я пытаюсь запустить некоторый код в командной строке (вне моего веб-приложения, с помощью добавленного мной метода main()) и mvn exec:java не может разрешить код в MySpecialLib, потому что это не таквключается в путь к классам "времени выполнения".

Как можно:

  • добавить MySpecialLib в путь к классам времени выполнения

или

  • скажите mvn exec:java также использовать system classpath?

Я пробовал mvn exec:java -Dexec.classpathScope=system, но это исключает все, что включено runtime.

Ответы [ 5 ]

14 голосов
/ 06 ноября 2014

Использовать область компиляции для запуска плагина maven exec - mvn exec:java -Dexec.classpathScope=compile.Это будет включать системные зависимости.

1 голос
/ 18 января 2017

Как указала EG, решение состоит в том, чтобы при запуске exec использовать область действия compile .

При каждом вызове:

mvn exec:java -Dexec.classpathScope=compile

или непосредственно в exec-plugin-configuration:

     <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        ...
        <configuration>
              <classpathScope>compile</classpathScope>
        </configuration>
    </plugin>
1 голос
/ 02 мая 2011
1 голос
/ 13 марта 2011

Интересно знать, что classpathScope=system отбрасывает runtime зависимости.Я обнаружил, что включение его как plugin в pom.xml работает как альтернатива.Не могли бы вы попробовать и сообщить мне, работает ли он и у вас?

Поэтому я добавил системную зависимость в коллекцию общин в качестве примера, подобного вашему артефакту: -

 <dependency>
        <groupId>commons-collections</groupId>
      <artifactId>commons-collections</artifactId>
      <version>3.0</version>
        <scope>system</scope>
        <systemPath>C:\\<some_path>\\commons-collections-3.0.jar</systemPath>
    </dependency>

Затем в теге <build> у меня есть плагин exec-maven-plugin, который будет выполняться в фазе install: -

<plugin>
   <groupId>org.codehaus.mojo</groupId>
   <artifactId>exec-maven-plugin</artifactId>
   <version>1.1</version>
   <executions>
    <execution>
     <phase>install</phase>
     <goals>
      <goal>java</goal>
     </goals>
     <configuration>
      <mainClass>com.stackoverflow.test.App</mainClass>
     </configuration>
    </execution>
   </executions>
  </plugin>

Затем я запустил mvn install.Я также убедился, что класс com.stackoverflow.test.App имеет некоторый код, который вызывает класс из commons-collections-3.0.

Надеюсь, это поможет.

0 голосов
/ 13 марта 2011

Правильный ответ - использовать maven-install-plugin и поместить The Jar в свой локальный репо. Или, что еще лучше, запустите nexus или artifactory и используйте плагин deploy, чтобы вставить туда jar. Системный classpath - это просто мир боли.

...