【问题标题】:Spring 3.0.0 dependencies download with Maven使用 Maven 下载 Spring 3.0.0 依赖项
【发布时间】:2011-01-18 06:22:50
【问题描述】:

我刚刚从 .NET 过渡到 JAVA,必须使用 Spring 3.0.0 启动 JAVA 项目。和休眠。

有人可以向我解释一下如何使用 Maven 下载 spring 依赖项。我只是一整天都没有成功。

PS。我有 Java 1.5.06 并且已经下载了 spring(没有依赖项)并安装了 Maven。

编辑:

c0mrade:

我认为从春季 3.0.0 开始。他们是 被认为是可选依赖项 所以它们需要单独包含 每个依赖,这只是一个猜测 我不确定这一点,如果帕斯卡或 更有经验的人证实了我的 声明那么它是真的,到目前为止我已经 使用 spring 2.5.5

是的...它们绝对是可选的,所以这就是我所做的。我只是将 hibernate 依赖项从 spring-orm pom 文件复制/粘贴到 myproject pom 文件,这意味着现在我在 pom 文件中定义了 spring 和 hibernate 依赖项。然后我在 myproject 上运行“mvn install”,然后手动将所有 spring 和 hibernate jar 复制到我项目的 lib 文件夹中。

所以现在我有一个带有 spring 和 hibernate 的 Java 项目。 :)

我正在学习 Java,这只是我的第二天,所以如果我做错了什么,请告诉我。

更新:

rlovtang:

使用 maven 时,您无需手动操作 下载任何依赖项(例如 春天),你也没有手抄 jar 到您的项目 lib 文件夹。全部 这是由自动处理的 maven 当你运行'mvn install'。如何 你打包你的应用程序,是吗 战争?

我明白这一点。我很清楚 Maven 会自动管理本地存储库中依赖项的类路径,因此我的项目可以在本地机器上正常工作。而且我还认为您可以选择将您的依赖项 jar 打包到您的 WAR 或 EAR 中,但是如果我想将我的应用程序打包为 JAR 以及输出(目标)文件夹中的所有依赖项 JAR 怎么办? 你看,我不想只用 pom.xml 部署我的 JAR 文件,而是我的应用程序运行所需的所有 JAR。


还是不行:

这是我的 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>

<dependencies>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring</artifactId>
        <version>3.0.0.</version>
    </dependency>
</dependencies>

当我点击“mvn install”时,我得到了这个异常:

[INFO] 正在扫描项目... [信息] ------------------------------------------------------------ ------------------------- [错误] 致命错误 [信息] ------------------------------------------------------------ ------------------------- [信息] 空 [信息] ------------------------------------------------------------ ------------------------- [信息] 追踪 java.lang.NullPointerException 在 org.apache.maven.artifact.versioning.DefaultArtifactVersion.parseVersion(DefaultArtifactVersion.jav 答:136) 在 org.apache.maven.artifact.versioning.DefaultArtifactVersion.(DefaultArtifactVersion.java:47) 在 org.apache.maven.artifact.versioning.VersionRange.createFromVersion(VersionRange.java:219) 在 org.apache.maven.project.artifact.ProjectArtifactFactory.create(ProjectArtifactFactory.java:37) 在 org.apache.maven.project.DefaultMavenProjectBuilder.processProjectLogic(DefaultMavenProjectBuilder. 爪哇:1017) 在 org.apache.maven.project.DefaultMavenProjectBuilder.buildInternal(DefaultMavenProjectBuilder.java:8 80) 在 org.apache.maven.project.DefaultMavenProjectBuilder.buildFromSourceFileInternal(DefaultMavenProject Builder.java:508) 在 org.apache.maven.project.DefaultMavenProjectBuilder.build(DefaultMavenProjectBuilder.java:200) 在 org.apache.maven.DefaultMaven.getProject(DefaultMaven.java:604) 在 org.apache.maven.DefaultMaven.collectProjects(DefaultMaven.java:487) 在 org.apache.maven.DefaultMaven.getProjects(DefaultMaven.java:391) 在 org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:272) 在 org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138) 在 org.apache.maven.cli.MavenCli.main(MavenCli.java:362) 在 org.apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:60) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(未知来源) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源) 在 java.lang.reflect.Method.invoke(未知来源) 在 org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315) 在 org.codehaus.classworlds.Launcher.launch(Launcher.java:255) 在 org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430) 在 org.codehaus.classworlds.Launcher.main(Launcher.java:375) [信息] ------------------------------------------------------------ ------------------------- [INFO] 总时间:

【问题讨论】:

  • 我还建议您通过示例阅读免费的电子书 maven,我基本上在几天内就学会了 maven,当然是基础知识.. 但我仍然不时问一两个关于 maven 的问题
  • @Goran pokusaj 3.0.0.RELEASE 正如 Kees de Kooter 建议的那样
  • @Tim 也许你应该帮助他而不是寻找重复的问题
  • @Goran,你做的怎么样了?
  • 使用 maven 时,您无需手动下载任何依赖项(如 spring),也无需手动将任何 jar 复制到项目的 lib 文件夹中。当您运行“mvn install”时,所有这些都由 maven 自动处理。你如何打包你的应用程序,是不是战争?

标签: java spring maven-2 dependencies


【解决方案1】:

实际上,您的 POM 是错误的,它缺少重要部分。你至少需要这样的东西(这是一个最小的 POM):

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mycompany.myproject</groupId>
  <artifactId>my-app</artifactId>
  <version>1.0-SNAPSHOT</version>
  <name>My App</name>
</project>

要添加 spring 依赖项,我建议使用以下内容:

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mycompany.myproject</groupId>
  <artifactId>my-app</artifactId>
  <version>1.0-SNAPSHOT</version>
  <name>My App</name>

  <properties>
    <org.springframework.version>3.0.0.RELEASE</org.springframework.version>
  </properties>

  <dependencies>

    <!--
        Core utilities used by other modules.
        Define this if you use Spring Utility APIs (org.springframework.core.*/org.springframework.util.*)
    -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>${org.springframework.version}</version>
    </dependency>

  </dependencies>
</project>

有关 Spring 工件的完整列表,请查看 Obtaining Spring 3 Artifacts with Maven 并获取所需的内容。

更新:仅供参考,有许多 repository search engines 可以帮助您找到工件。如果您不习惯 Maven,这可能会有所帮助。另请注意,您可以获得一些 IDE 支持(Idea、Eclipse、NetBeans,我认为它们都提供了存储库搜索功能)。实际上,在您的情况下,我建议使用 SpringSource Tools Suite (STS),它是 Eclipse 的集成版本(捆绑了一些用于 Spring 项目开发的插件,包括 Maven 支持)。 STS 是一个完全集成的环境,非常接近您在 .NET 世界 IMO 中可以获得的环境。你会喜欢的。

【讨论】:

  • 我将所有内容粘贴到我的 pom.xml 中,但仍然得到 NullPointerException... 请记住,我只有 1 天的 JAVA 经验。
  • @Pascal:他是 Java、Maven 和 Spring 的新手。也许在你的例子中添加 ${org.springframework.version} 属性,或者用实际版本替换它。他很困惑它是.. ;)
  • @Tim 我已经做到了(因为我提供的链接正在使用这个属性,我更喜欢使用它,如果你需要他们的许多工件,这无论如何都是一件好事)。
  • 非常感谢...您帮了大忙。
【解决方案2】:

从 Spring 3 开始,不再有一个大的 superjar。你应该选择你需要的部分。你至少需要:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>3.0.0.RELEASE</version>
</dependency>

【讨论】:

    【解决方案3】:

    把它放在你的 pom.xml 中

    <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring</artifactId>
                <version>3.0.0.RELEASE</version>
            </dependency>
    

    有几个 maven 存储库可以从中下载库,这里是一个

    http://maven.nuxeo.org/nexus/index.html#welcome

    如果存储库中有特定版本的 spring,这应该可以工作,我目前使用 2.5.5

    更新

    你看,我不想部署我的 JAR 仅包含 pom.xml 的文件,但所有 我需要的 JAR 要运行的应用程序。

    然后你需要一个叫做组装插件的东西,它会为你制作带有依赖关系的.jar,你记得我给的书链接,搜索组装关键字以了解更多信息。但这是我如何使用组装:

    <plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
    <descriptorRefs>
    <descriptorRef>jar-with-dependencies</descriptorRef>
    </descriptorRefs>
    </configuration>
    </plugin>
    
    mvn clean install assembly:assembly
    

    也就是说,如果你想要.jar,那么你需要指定&lt;packaging&gt;jar&lt;/packaging&gt;

    【讨论】:

    • 版本应该是“3.0.0.RELEASE”
    • @Kees de Kooteras 我说我使用 2.5.5 他可以在存储库中查找确切的版本号..
    • c0mrade 说:“他可以在存储库上查找它的确切版本号”...如何,在哪里???
    • 我会试试这个,如果我发现一些问题,我可能会提出一个新问题。非常感谢 c0mrade!
    【解决方案4】:
    <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>
      <groupId>org.my.application</groupId>
      <artifactId>slickapp</artifactId>
      <packaging>jar</packaging>
      <version>1.0-SNAPSHOT</version>
      <name>My application</name>
      <inceptionYear>2010</inceptionYear>
    
    
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.4.2</version>
            <configuration>
              <argLine>-Xmx512m -XX:MaxPermSize=256M -XX:PermSize=20M</argLine>
            </configuration>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-install-plugin</artifactId>
            <version>2.2</version>
          </plugin>
          <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
              <source>1.5</source>
              <target>1.5</target>
              <fork>true</fork>
              <meminitial>128m</meminitial>
              <maxmem>512m</maxmem>
            </configuration>
          </plugin>
        </plugins>
      </build>
        <dependencies>
          <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
            <exclusions>
              <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
              </exclusion>
            </exclusions>
          </dependency>
          <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${spring.version}</version>
            <exclusions>
              <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
              </exclusion>
            </exclusions>
          </dependency>
          <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
            <exclusions>
              <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
              </exclusion>
            </exclusions>
          </dependency>
          <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${spring.version}</version>
            <exclusions>
              <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
              </exclusion>
            </exclusions>
          </dependency>
          <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
            <exclusions>
              <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
              </exclusion>
            </exclusions>
          </dependency>
          <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
            <exclusions>
              <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
              </exclusion>
            </exclusions>
          </dependency>
          <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
            <exclusions>
              <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
              </exclusion>
            </exclusions>
          </dependency>
          <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring.version}</version>
            <exclusions>
              <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
              </exclusion>
            </exclusions>
          </dependency>
          <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
            <exclusions>
              <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
              </exclusion>
            </exclusions>
          </dependency>
          <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
            <exclusions>
              <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
              </exclusion>
            </exclusions>
          </dependency>
          <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
            <exclusions>
              <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
              </exclusion>
            </exclusions>
          </dependency>
          <dependency>
            <groupId>aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.5.3</version>
          </dependency>
          <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.1</version>
            <scope>provided</scope>
          </dependency>
    
          <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.7</version>
            <scope>test</scope>
          </dependency>
        </dependencies>
    
      <properties>
        <spring.version>3.0.0.RELEASE</spring.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      </properties>
    </project>
    

    【讨论】:

    • 我很着急,所以我不能添加很多解释,我只是对我已经写过的东西做了一些剪切和粘贴。对于那个很抱歉。您必须更改标签 groupId artifactId 和包装中包含的信息(对于 war 文件,这可能是“war”而不是 jar 文件或多模块项目的“pom”)。你应该去掉所有对你来说不必要的依赖。
    【解决方案5】:

    好的。我得到了这个工作:

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-orm</artifactId>
      <version>${org.springframework.version}</version>
    </dependency>
    

    我看到各种 jars 正在下载,但仍然不知道它们在 哪里下载

    我还看到正在下载各种 spring jar(例如 spring-jdbc-3.0.0.RELEASE.jar),但是 Hibernate 在哪里?不应该也下载Hibernate吗???

    【讨论】:

    • @Goran 它们被下载到您的本地存储库,在您的用户根文件夹的 .m2 文件夹中,并且有人提到 spring 不再是一个大 jar 文件,您需要选择您需要的依赖项需要,然后将它们包含在你的 pom 中以下载到本地存储库,我建议你看一下这本书,它不是很长但很有用,只需阅读几章,你就会明白它的全部内容阅读第二章我保证..这里是sonatype.com/books/mvnex-book/reference/public-book.html
    • @Goran 也不是添加新答案,而是在 SO 上的常见做法是编辑您的帖子而不添加新答案,除非您想回​​答自己鼓励的问题
    • @c0mrade:现在读这本书...但是如果我理解正确的话,我需要在我的 pom 文件中将 Hibernate 依赖与 spring-orm 分开声明。一直以来,我认为当我在 pom 文件中单独声明 spring-orm 依赖项时,会自动下载 Hibernate 和所有其他 spring-orm “子依赖项”(以这种方式调用它们)。
    • @Goran 我认为从春季 3.0.0 开始。它们被认为是可选依赖项,因此它们需要分别包含在每个依赖项中,这只是一个猜测,我不确定这一点,如果 Pascal 或更有经验的人证实了我的陈述,那么它是真的,到目前为止我已经使用过春天 2.5.5
    【解决方案6】:

    我找到了 pom.xml 的一个很好的例子,它对我来说很好。

    这是链接Spring 3 Hibernate 4 Pom.xml

    【讨论】:

      猜你喜欢
      • 2013-05-22
      • 2020-07-06
      • 2020-04-30
      • 1970-01-01
      • 2011-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多