使用 Maven 下载 Spring 3.0.0 依赖项

Posted

技术标签:

【中文标题】使用 Maven 下载 Spring 3.0.0 依赖项【英文标题】:Spring 3.0.0 dependencies download with Maven 【发布时间】: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 自动处理。你如何打包你的应用程序,是不是战争? 【参考方案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

【讨论】:

以上是关于使用 Maven 下载 Spring 3.0.0 依赖项的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 3 新特性及快速使用示例

Spring Boot 3 新特性及快速使用示例

mybatis spring maven

Maven - 下载JAR包

在不使用 Maven 的情况下,我在哪里可以下载 Spring Framework jar?

springfrmework web servlet jar包的maven 坐标 求帮忙