我有一个带有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>
答案 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 plugin,onejar-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。