1

我试图从书中下载 Spring/Java 代码来运行他们的代码并对其进行测试,但不幸的是我遇到了错误,

我看到这是一个常见错误,但没有看到我的 pom 文件的修复程序,

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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.apress.springrecipes</groupId>
        <artifactId>core</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <artifactId>springintro</artifactId>
    <name>Introduction to Spring</name>
    <dependencies>

        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
        </dependency>
        <dependency>
            <groupId>org.jboss.javaee</groupId>
            <artifactId>jboss-jca-api</artifactId>
        </dependency>

    </dependencies>


</project>

错误

Jul 17, 2013 3:51:20 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@be41ec: startup date [Wed Jul 17 15:51:20 EDT 2013]; root of context hierarchy
Jul 17, 2013 3:51:20 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [beans.xml]
Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [beans.xml]; nested exception is java.io.FileNotFoundException: class path resource [beans.xml] cannot be opened because it does not exist
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:341)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:212)
    at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:126)
    at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:92)
    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130)
    at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:465)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:395)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
    at com.apress.springrecipes.hello.Main.main(Main.java:10)
Caused by: java.io.FileNotFoundException: class path resource [beans.xml] cannot be opened because it does not exist
    at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:141)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:328)
    ... 13 more

Pom 文件错误:

maven-dependency-plugin (goals "copy-dependencies", "unpack") is not supported by m2e.
maven-resources-plugin prior to 2.4 is not supported by m2e. Use maven-resources-plugin version 2.4 or later.
4

2 回答 2

3

@Pace 所说的完全正确,我相信 OP 应该尝试了解 m2e 在做什么。 我个人讨厌 m2e 在 0.10 之后的行为,为此他们引入了连接器概念。这个概念很好,但是告诉 Eclipse 如何对不受支持的插件做出反应的方法是严重污染 POM,这在我看来很糟糕。切换回较旧的 M2E 版本可能会使您的生活更轻松,尽管您会失去一些功能。

从您引用的错误消息中回到您的问题:

m2e 不支持 2.4 之前的 maven-resources-plugin。使用 maven-resources-plugin 2.4 或更高版本。

在我看来,m2e 确实支持 maven-resources-plugin >= 2.4 (我不确定,我之前没有遇到过与您类似的问题)。尝试在您的 POM 中使用 maven-resources-plugin 的更新版本(2.4 或更高版本,最新的是 2.6),M2E 可能能够为您选择设置。

IE

<project>
...
  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-resources-plugin</artifactId>
          <version>2.6</version>
        </plugin>
      </plugins>
       ....
    </pluginManagement>
      ....
  </build>
</project>

标记您使用的插件版本始终是一个好习惯。这导致更“可重复”的构建。

于 2013-07-18T01:43:04.867 回答
2

m2e 不是 Maven。POM 文件错误是说 Eclipse 的 Maven 插件 (m2e) 不知道如何处理 "copy-dependencies":"unpack" 目标。m2e 的工作方式必须了解目标在 pom 文件中的作用,以便它可以在 Eclipse 构建中复制该行为。

您可以做两件主要的事情:

  1. 告诉 Eclipse 忽略目标 - 这将使您不会收到错误。在 Eclipse 增量构建期间,解包步骤永远不会发生,当您进行完整的 Maven 构建时,它仍然会发生。
  2. 安装一个“连接器”,它告诉 Eclipse 在遇到该目标时要做什么。可以在此处找到此目标的连接器。

至于 maven-resources-plugin,除了升级 POM 中指定的插件版本之外,我没有看到任何其他选项。那里的错误是说 Eclipse 的 Maven 插件不能与旧的 Maven 插件一起使用。

我不知道是什么导致了文件未找到错误,但怀疑是因为该文件包含在 Eclipse 未解包的任何内容中。

于 2013-07-17T21:50:59.970 回答