Maven不会部署依赖项

时间:2010-08-03 19:41:37

标签: java maven-2 dependencies

我有一个带有3个依赖项的简单项目,但出于某种原因,当我从eclipse运行时运行为 - > maven安装。我没有得到依赖。不在快照罐里面而不在外面...... 任何的想法? 这是我的pom:

<?xml version="1.0"?>
<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>
  <groupId>com</groupId>
  <artifactId>trade</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
  <name>trade</name>
  <url>http://maven.apache.org</url>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.6</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.12</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>
</project>

3 个答案:

答案 0 :(得分:17)

  

(...)我没有得到依赖项。不在快照罐里面而不在外面......任何想法?

是的:对于具有jar包装的项目,这不应该发生。创建的jar“only”包含项目中的类,在编译和测试执行期间“仅”使用依赖项。

依赖机制简介

  

Dependency Scope

     

依赖范围用于限制   依赖的传递性,也是   影响用于的类路径   各种构建任务。

     

有6个范围:

     
      
  • 编译
        这是默认范围,如果未指定,则使用此范围。编   所有依赖项都可用   项目的类路径。此外,   这些依赖关系被传播到   依赖项目。
  •   
  • 提供
        这很像编译,但表示你期望JDK或   容器提供依赖关系   运行。例如,建立一个   Java的Web应用程序   企业版,你会设置   依赖于Servlet API和   提供的相关Java EE API   因为Web容器提供   那些课程。这个范围只是   可用于编译和测试   classpath,并且不具有传递性。
  •   
  • 运行时
        此范围表示不需要依赖项   编译,但是用于执行。它   在运行时和测试类路径中,   但不是编译类路径。
  •   
  • 测试
        此范围表示正常情况下不需要依赖关系   使用该应用程序,并且只是   可用于测试编译和   执行阶段。
  •   
  • 系统
        此范围与提供的类似,但您必须这样做   提供包含它的JAR   明确。工件总是如此   可用,并没有查找   库中。
  •   
  • 导入(仅适用于Maven 2.0.9或更高版本)
        此范围仅用于pom中类型为pom的依赖项   <dependencyManagement>部分。它   表示指定的POM   应该换成   POM中的依赖关系   <dependencyManagement>部分。   因为它们被替换,依赖   实际上并没有进口范围   参与限制   依赖的传递性。
  •   
     

...

如果要构建包含依赖项的独立可执行jar,请考虑使用Maven Assembly Plugin和预定义的jar-with-dependencies描述符。看看以前的答案:

其他选项包括maven shade pluginonejar-maven-plugin。对于简单的用例,我建议使用程序集插件。

答案 1 :(得分:1)

你选择了一种罐子包装。因此,包中不会存在依赖关系。

当您构建软件包并执行编译阶段时,Maven已经将依赖项下载到本地Maven存储库(通常位于您的主目录下的.m2目录中)。

如果您希望将依赖项打包在发行版中,则EAR / WAR文件是更好的方法,这仅适用于Java EE应用程序,而不适用于独立的Java SE应用程序。

此外,尽管涉及EAR / WAR打包方案,但仍不会打包某些依赖项。这是由于应用于依赖项的范围。具有测试范围的JUnit永远不会打包,因为它的使用仅限于测试执行。

答案 2 :(得分:0)

首先,确保您可以在Eclipse的外部构建项目。在命令提示符下,尝试'mvn install'。那应该把你的deps放在$ HOME / .m2 / repository下面。如果确实如此,则问题出在Eclipse上。

如果您的目标是将自己的档案包装在档案中,则需要查看assembly和/或dependency插件。

另外,我建议安装m2eclipse