[英]Maven won't deploy dependencies
我有一个简单的项目,有3个依赖项,但出于某种原因,当我从eclipse运行时运行 - > maven install。 我没有得到依赖。 不在快照罐里面,不在外面......任何想法? 这是我的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>
(...)我没有得到依赖。 不在快照罐里面,不在外面......任何想法?
是的:对于带有jar
包装的项目,这不应该发生。 创建的jar“only”包含项目中的类,在编译和测试执行期间“仅”使用依赖项。
从介绍到依赖机制 :
依赖范围
依赖范围用于限制依赖的传递性,还用于影响用于各种构建任务的类路径。
有6个范围可用:
- 编
这是默认范围,如果未指定,则使用此范围。 编译依赖项在项目的所有类路径中都可用。 此外,这些依赖项将传播到依赖项目。- 提供
这很像compile,但表示您希望JDK或容器在运行时提供依赖性。 例如,在为Java Enterprise Edition构建Web应用程序时,您可以将Servlet API和相关Java EE API的依赖关系设置为提供的范围,因为Web容器提供了这些类。 此范围仅在编译和测试类路径中可用,并且不可传递。- 运行
此范围表示编译不需要依赖项,但是用于执行。 它位于运行时和测试类路径中,但不是编译类路径。- 测试
此范围表示正常使用应用程序不需要依赖关系,并且仅可用于测试编译和执行阶段。- 系统
此范围与提供的类似,只是您必须提供明确包含它的JAR。 工件始终可用,并且不会在存储库中查找。- 导入 (仅适用于Maven 2.0.9或更高版本)
此范围仅用于<dependencyManagement>
部分中类型为pom的<dependencyManagement>
。 它表示应该用POM的<dependencyManagement>
部分中的依赖项替换指定的POM。 由于它们被替换,具有导入范围的依赖性实际上不参与限制依赖性的传递性。...
如果要构建包含依赖项的独立可执行jar,请考虑使用Maven Assembly Plugin和预定义的jar-with-dependencies
描述符。 看看以前的这些答案:
其他选项包括maven shade插件 , onejar-maven-plugin 。 对于简单的用例,我建议使用程序集插件。
你选择了一种罐子包装。 因此,包中不会存在依赖关系。
在构建程序包并执行编译阶段时,Maven已经将依赖项下载到本地Maven存储库(通常位于主目录下的.m2目录中)。
如果您希望将依赖项打包在发行版中,则EAR / WAR文件是更好的方法,这仅适用于Java EE应用程序,而不适用于独立的Java SE应用程序。
此外,尽管涉及EAR / WAR打包方案,但不会打包某些依赖项。 这是由于应用于依赖项的范围。 具有测试范围的JUnit永远不会打包,因为它的使用仅限于测试执行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.