Java 如何确定需要哪些罐子?
我如何系统地确定我需要哪些JAR,从而应该包含在我使用maven作为项目管理工具的pom.xml文件中 在学习spring时,为了保持简单,将所有的jar(甚至是我从未使用过的jar)添加到类路径中 现在大部分时间,我在猜测应该包括哪些罐子。例如,我知道在我的spring配置文件中,我有:Java 如何确定需要哪些罐子?,java,spring,maven-2,Java,Spring,Maven 2,我如何系统地确定我需要哪些JAR,从而应该包含在我使用maven作为项目管理工具的pom.xml文件中 在学习spring时,为了保持简单,将所有的jar(甚至是我从未使用过的jar)添加到类路径中 现在大部分时间,我在猜测应该包括哪些罐子。例如,我知道在我的spring配置文件中,我有: <tx:annotation-driven /> <context:annotation-config /> <aop:aspectj-autoproxy /> 所以,我
<tx:annotation-driven />
<context:annotation-config />
<aop:aspectj-autoproxy />
所以,我想我需要:spring-context-x.x.x.jar,spring-tx-x.x.jar,spring-aop-x.x.x.jar
谢谢。我只看到两种可能的选择。要么: 了解您正在做什么,并在事实发生之前添加所需的依赖项~或~ 毫无疑问,不要添加依赖项,让事情失败,然后在事实发生后添加依赖项
我认为只有两种可能的选择。要么: 了解您正在做什么,并在事实发生之前添加所需的依赖项~或~ 毫无疑问,不要添加依赖项,让事情失败,然后在事实发生后添加依赖项
对于查找哪些JAR包含哪些类及其相关依赖项的一般问题,您可以尝试。它以一个类名作为输入,并输出一系列Maven依赖项,您可以使用这些依赖项来获取所述类 特别是对于Spring,我相信您必须参考它的文档。如果您有Maven的IDE支持,通常只需填写spring groupId org.springframework并在其中激活自动完成,即可查看哪些JAR可用。Spring文档中的主要部分往往有各自独立的jar 我相信您已经看到,另一个很好的指标是applicationContext.XML文件中使用的XML名称空间,这表明您需要一个单独的JAR。例如,下面是一个使用aop、tx和beans的项目的XML根节点:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"
default-autowire="byName">
上面的示例意味着您需要SpringBean、SpringAOP和SpringTX JARs,spring的JAR命名是相当一致的。我不确定上面的说法是否总是正确的,但至少应该给你一个提示。对于查找哪些JAR包含哪些类及其相关依赖项的一般问题,你可以试试。它以一个类名作为输入,并输出一系列Maven依赖项,您可以使用这些依赖项来获取所述类 特别是对于Spring,我相信您必须参考它的文档。如果您有Maven的IDE支持,通常只需填写spring groupId org.springframework并在其中激活自动完成,即可查看哪些JAR可用。Spring文档中的主要部分往往有各自独立的jar 我相信您已经看到,另一个很好的指标是applicationContext.XML文件中使用的XML名称空间,这表明您需要一个单独的JAR。例如,下面是一个使用aop、tx和beans的项目的XML根节点:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"
default-autowire="byName">
上面的示例意味着您需要SpringBean、SpringAOP和SpringTX JARs,spring的JAR命名是相当一致的。我不确定上述内容是否总是正确的,但至少应该给你一个提示。完全忘记JAR文件的一个简单方法是使用nexus 如果你是一家公司,你可以设置自己的Nexus服务器。如果不是,请使用公共服务器,如http://repository.sonatype.org 注意:我还没有用过这个,因为我们有自己的搜索库。 找到库后,复制/粘贴。。。进入你的POM文件,你就可以开始了
我忘了我们是如何将maven与nexus服务器联系起来的,但这并不难。。做一点搜索,你就是黄金。不用再担心JAR文件了 完全忘记JAR文件的一个简单方法是使用nexus 如果你是一家公司,你可以设置自己的Nexus服务器。如果不是,请使用公共服务器,如http://repository.sonatype.org 注意:我还没有用过这个,因为我们有自己的搜索库。 找到库后,复制/粘贴。。。进入你的POM文件,你就可以开始了
我忘了我们是如何将maven与nexus服务器联系起来的,但这并不难。。做一点搜索,你就是黄金。不用再担心JAR文件了 不添加依赖项并让事情失败可能更糟,因为您可能在最坏的情况下才发现缺少的依赖项。例如,假设某个库用于在发生严重错误时发送邮件-在该错误发生之前,您可能永远也不会发现它,即使发生了错误,您也可能不会发现它-您无法收到邮件!。简而言之,这两个建议都不是系统性的。@Avi您可能想要它,但以完全自动化的方式这是不可能的。工具可以提供一些帮助,例如mvn依赖关系:分析,但它们不会考虑运行时依赖关系。所以,假设您有高覆盖率的测试,就可以手动调整类路径和回归测试。最后,不管你喜不喜欢,都要知道你在做什么是你最好的武器。@Avi在这个问题的上下文中,我假设OP是
例如,在测试期间使用他正在添加到Spring上下文配置中的内容,或者我猜他不会添加这些内容。现在,如果你的背景不同,请随意提出不同的问题。如果你对这个问题有更好的答案,请随意发布。为了清晰起见,@Avi删除了他最初的评论,他说这个答案无助于发现随时间积累的已使用/未使用的依赖项,顺便说一句,这并不是OP所要求的。我的第一个评论是对他删除的评论的回答。不添加依赖项并让事情失败可能更糟,因为在最坏的情况下,您可能无法找到缺少的依赖项。例如,假设某个库用于在发生严重错误时发送邮件-在该错误发生之前,您可能永远也不会发现它,即使发生了错误,您也可能不会发现它-您无法收到邮件!。简而言之,这两个建议都不是系统性的。@Avi您可能想要它,但以完全自动化的方式这是不可能的。工具可以提供一些帮助,例如mvn依赖关系:分析,但它们不会考虑运行时依赖关系。所以,假设您有高覆盖率的测试,就可以手动调整类路径和回归测试。最后,知道你在做什么是你最好的武器,不管你喜欢与否。@Avi在这个问题的上下文中,我假设OP正在使用,例如在测试期间,他添加到Spring上下文配置中的东西,或者我猜他不会添加它们。现在,如果你的背景不同,请随意提出不同的问题。如果你对这个问题有更好的答案,请随意发布。为了清楚起见,@Avi删除了他最初的评论,他说这个答案无助于查找随时间累积的已使用/未使用的依赖项,这与OP所问的不完全一致。顺便说一句,我的第一条评论是对他删除的评论的回答。