使用 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,那么你需要指定<packaging>jar</packaging>
【讨论】:
版本应该是“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 依赖项的主要内容,如果未能解决你的问题,请参考以下文章