Maven没有为Eclipse项目添加类路径

时间:2011-08-15 22:18:17

标签: eclipse maven classpath

我有一个maven项目,我正在研究Eclipse。

我使用maven eclipse:eclipse来生成类路径,但是......它永远不会在eclipse项目中添加类路径。我已经尝试了maven-eclipse-plugin,我已经尝试过M2Eclipse插件,但是无论我做什么都没关系,我无法让classpath条目开始工作。我有很多构建错误,甚至认为maven完美地构建了耳朵。

任何指导方针?

感谢您的回答!

更新:这是我的根类路径:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="core/src/main/java"/>
    <classpathentry excluding="**" kind="src" output="target/classes" path="core/src/main/resources"/>
    <classpathentry kind="src" path="client/src/main/java"/>
    <classpathentry kind="src" path="client/src/main/resources"/>
    <classpathentry kind="src" path="junit_server/src/main/java"/>
    <classpathentry kind="src" path="initializer/src/main/java"/>
    <classpathentry kind="src" path="initializer/src/main/webapp"/>
    <classpathentry kind="src" path="site/src/main/webapp"/>
    <classpathentry kind="src" path="core/src/test/java"/>
    <classpathentry kind="src" path="core/src/test/resources"/>
    <classpathentry exported="true" kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
    <classpathentry exported="true" kind="var" path="M2_REPO"/>
    <classpathentry kind="output" path="target/classes"/>
</classpath>

UPDATE2:这是我的.project:

<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
    <name>coreisp_back</name>
    <comment></comment>
    <projects>
    </projects>
    <buildSpec>
        <buildCommand>
            <name>org.eclipse.jdt.core.javabuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>org.eclipse.m2e.core.maven2Builder</name>
            <arguments>
            </arguments>
        </buildCommand>
    </buildSpec>
    <natures>
        <nature>org.eclipse.m2e.core.maven2Nature</nature>
        <nature>org.eclipse.jdt.core.javanature</nature>
    </natures>
</projectDescription>

7 个答案:

答案 0 :(得分:16)

Maven Eclipse插件生成的设置与m2e / m2eclipse不兼容。如果你想一起使用Maven和Eclipse,最好的方法是删除maven eclipse插件生成的设置的任何修改,并使用m2e导入你的Maven项目。

答案 1 :(得分:7)

答案 2 :(得分:6)

您需要使用build-helper-maven-plugin将额外的源文件夹添加到pom.xml。 然后运行

mvn eclipse:清除日食:日食

例如这个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>mygroup</groupId>
    <artifactId>artifact</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>artifact</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <version>1.7</version>
                <executions>
                    <execution>
                        <id>add-source</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>add-source</goal>
                        </goals>
                        <configuration>
                            <sources>
                                <source>client/src/main/java</source>
                            </sources>
                        </configuration>
                    </execution>
                    <execution>
                        <id>add-resource</id>
                        <phase>generate-resources</phase>
                        <goals>
                            <goal>add-resource</goal>
                        </goals>
                        <configuration>
                            <resources>
                                <resource>
                                    <directory>client/src/main/resources</directory>
                                    <targetPath>resources</targetPath>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

生成此.classpath

<classpath>
  <classpathentry kind="src" path="src/test/java" output="target/test-classes" including="**/*.java"/>
  <classpathentry kind="src" path="src/main/java" including="**/*.java"/>
  <classpathentry kind="src" path="client/src/main/java" including="**/*.java"/>
  <classpathentry kind="src" path="client/src/main/resources" excluding="**/*.java"/>
  <classpathentry kind="output" path="target/classes"/>
  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
</classpath>

确保文件夹存在,如果路径不正确,则不会添加。 在maven日志中查找。

[INFO]跳过不存在的resourceDirectory / tmp / artifact / src / main / resources

我的团队发现eclipse maven插件不稳定,选择通过maven创建我们的整个eclipse配置。

答案 3 :(得分:1)

这是依赖于m2eclipse。执行此操作时,所有依赖项都由maven / m2eclipse处理,因此.classpath变得非常小。

在项目架构方面,你想要每个maven pom有一个eclipse项目。 每个项目.classpath只包含源,JRE和maven注入:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" output="target/classes" path="src/main/java"/>
    <classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
    <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
    <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
    <classpathentry kind="output" path="target/classes"/>
</classpath>

(根据您的来源进行调整)。

我怀疑您的许多错误来自依赖项中的重复条目,因为您手动注入它们(其他.classpath条目)和maven。

您还需要验证m2eclipse中的本地工作区分辨率是否已启用(默认情况下应该启用)。

答案 4 :(得分:1)

默认情况下,mvn安装不会自动导入到eclipse中。 因此,从命令提示符运行mvn install之后。运行以下命令:

mvn eclipse:eclipse

这会将所有jar导入到您的eclipse项目中,并且还会更新类路径。

首次向POM添加新依赖项并执行mvn编译或安装时,需要执行上述命令。

答案 5 :(得分:1)

除了投票最多的答案之外,你仍然可能留下一个破碎的项目,没有'Maven Dependencies'(开普勒)和没有类路径解析。

在我的情况下,当第三方sdk更新自己时,我的本地maven存储库settings.xml被删除,在重新启动eclipse之后似乎清除了对该settings.xml文件的引用。

我将文件放回并在Maven中引用它&gt;安装&gt;全局设置:/home/andy/.m2/settings.xml,清理每个项目启动所有必要的类路径解析。只是分享。

对我来说,生成的文件看起来像:

<强>的.classpath

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" output="target/classes" path="src/main/java"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
    <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"/>
    <classpathentry kind="output" path="target/classes"/>
</classpath>

<强>的.project

<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
    <name>jemh-ao</name>
    <comment></comment>
    <projects>
    </projects>
    <buildSpec>
        <buildCommand>
            <name>org.eclipse.jdt.core.javabuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>org.eclipse.m2e.core.maven2Builder</name>
            <arguments>
            </arguments>
        </buildCommand>
    </buildSpec>
    <natures>
        <nature>org.eclipse.jdt.core.javanature</nature>
        <nature>org.eclipse.m2e.core.maven2Nature</nature>
    </natures>
</projectDescription>

答案 6 :(得分:1)

我遇到的一个问题是在将项目转换为maven后我需要清除运行配置,因为转换不会更新类路径以配置maven依赖类路径。Eclipse Run Configuration classpath should show maven dependencies