maven mvn exec:java没有正确设置类路径

a5g8bdjr  于 12个月前  发布在  Maven
关注(0)|答案(3)|浏览(172)

我试图在命令行上使用Maven运行一个Java程序,但它没有将正确的条目放在类路径上。(它支持Maven),类路径有80个左右的条目,包括我的项目的jar依赖项、编译程序类和来自src/main/resources的资源。如果我用mvn exec:java运行程序,我只得到一个apache-maven-3.0.4/boot/plexus-classworlds-2.4.jar条目。在我的整个项目树中没有对plexus的引用。这个条目来自哪里?为什么其他预期的类路径条目不在那里?
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>

字符串

gk7wooem

gk7wooem1#

默认情况下,exec:java使用“runtime”作用域,这不会将依赖项设置为“compile”作用域。
您可以用途:

exec:java -Dexec.classpathScope="compile"

字符串
包含编译依赖项(不能100%确定-D语法,但变量肯定是exec.classpathScope)。
如果你需要更多的信息/选项,插件页面上有一些选项:http://mojo.codehaus.org/exec-maven-plugin/java-mojo.html

uoifb46i

uoifb46i2#

我不知道Plexus(我猜它是Exec Maven Plugin的依赖项?),但尝试在调试打开时运行: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
....

字符串
您应该会看到很多“Addingprojectdependencyartifact”消息。

相关问题