2015-01-26 2 views
0

Я пытаюсь запустить программу Java с Maven в командной строке, но она не помещает правильные записи в путь к классам. Если я запустил программу в IntelliJ (у которой есть поддержка Maven), у classpath есть 80 или около того записей, включая зависимости jar-зависимостей моего проекта, классы программ компиляции и ресурсы из src/main/resources. Если я запускаю программу с mvn exec:java, я получаю только одну запись для apache-maven-3.0.4/boot/plexus-classworlds-2.4.jar. Нет ссылок на plexus во всем моем дереве проектов. Откуда появляется эта запись и почему другие ожидаемые записи в классе не существуют? версияmvn exec: java не задает путь к классу

Maven: Apache Maven 3.0.4 (r1232337; 2012-01-17 00:44:56-0800)

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.example</groupId> 
<artifactId>MyProject</artifactId> 
<version>SNAPSHOT</version> 
<packaging>jar</packaging> 
<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
</properties> 

<dependencies> 
    <!-- lots of dependencies --> 
</dependencies> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.5.1</version> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
       <showDeprecation>true</showDeprecation> 
       <showWarnings>true</showWarnings> 
       <executable>${env.JAVA_HOME}/bin/javac</executable> 
       <fork>true</fork> 
      </configuration> 
     </plugin> 
     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <configuration> 
       <descriptors> 
        <descriptor>${basedir}/src/assembly/assembly.xml</descriptor> 
       </descriptors> 
      <appendAssemblyId>false</appendAssemblyId> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>exec-maven-plugin</artifactId> 
      <version>1.1</version> 
      <configuration> 
       <mainClass>com.example.MyApp</mainClass> 
       <executable>${env.JAVA_HOME}/bin/java</executable> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

</project> 
+0

Пожалуйста, покажите свой полный пом, иначе это невозможно. Кроме того, было бы полезно, какую версию maven вы используете? Какая версия exec-maven-plugin? и т. д. – khmarbaise

+0

Я обновил свой вопрос с помощью версии pom и Maven, спасибо. – user3427070

+0

Сначала попробуйте обновить [exec-maven-plugin до новейшей версии 1.3.2] (http://mojo.codehaus.org/exec-maven-plugin/). – khmarbaise

ответ

0

По умолчанию ехес: Java использует 'выполнения' сферы, которая не приведет ваши зависимости установить с 'компилировать' сфера ,

Вы можете использовать:

exec:java -Dexec.classpathScope="compile" 

Для включения зависимостей компиляции (не 100% уверены в синтаксисе -D, но переменная exec.classpathScope наверняка).

Это должно сделать трюк. Если вам нужно больше информации/опции, страница плагин имеет некоторые опции в списке: http://mojo.codehaus.org/exec-maven-plugin/java-mojo.html

+0

Я пробовал работать с 'mvn exec: java -Dexec.classpathScope =" compile "', но у меня все еще такая же проблема. Я также попробовал '-Dexec.includeProjectDependencies = true' и' -Dexec.includePluginsDependencies = true', но не имел никакого эффекта. – user3427070

+0

includeProjectDependencies и includePluginsЗависимости не нужны. Однако classpathScope, вы должны иметь (по крайней мере) еще одну проблему. Вы пробовали «зависимость mvn: tree», чтобы понять, откуда возникает зависимость сплетения? – Psyx

1

Я не знаю, о сплетении (я предполагаю, что это является зависимость от Exec Maven плагин?), Но попробуйте запустить с отладкой включено: mvn exec:java -X, и это должно быть более ясным, что ваши зависимости добавляются к классам:

.... 
[DEBUG] Invoking : com.example.MyApp.main() 
[DEBUG] Plugin Dependencies will be excluded. 
[DEBUG] Project Dependencies will be included. 
[DEBUG] Collected project artifacts [log4j:log4j:jar:1.2.16:compile, commons-lang:commons-lang:jar:2.6:compile] 
[DEBUG] Collected project classpath [C:\MyProject\target\classes] 
[DEBUG] Adding to classpath : file:/C:/MyProject/target/classes/ 
[DEBUG] Adding project dependency artifact: log4j to classpath 
[DEBUG] Adding project dependency artifact: commons-lang to classpath 
.... 

Вы должны увидеть множество артефактов в «зависимость Добавление проекта» сообщения.

Смежные вопросы