通过maven创建jar的问题
Posted
技术标签:
【中文标题】通过maven创建jar的问题【英文标题】:Problem creating jar through maven 【发布时间】:2011-06-29 07:59:00 【问题描述】:嗨,
我正在尝试使用 maven 创建可执行 jar。 jar 已创建,当我尝试执行 java -jar myjar 时出现以下错误
引起:java.lang.ClassNotFoundException:org.apache.hadoop.conf.Configuration 在 java.net.URLClassLoader$1.run(URLClassLoader.java:202)
我提取了 jar,发现 hadoop 类不存在。在日志中我可以看到 hadoop jars 没有被复制。问题出在哪里
我的 pom.xml 如下:
org.apache.maven.plugins maven-compiler-plugin2.3.1版本>1.6 1.6 配置>插件>org.apache.maven.plugins maven-assembly-plugin2.2-beta-4 jar-with-dependencies com.MyClass 清单>存档>配置>包 单人目标>目标>执行>执行>插件>
<!-- Compile time dependencies -->
<dependency>
<groupId>bixo</groupId>
<artifactId>bixo-core</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>cascading</groupId>
<artifactId>cascading-core</artifactId>
</dependency>
<dependency>
<groupId>cascading</groupId>
<artifactId>cascading-11-jdbc</artifactId>
<version>0.0.4</version>
</dependency>
<dependency>
<groupId>hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>1.8.0.7</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tika</groupId>
<artifactId>tika-parsers</artifactId>
<version>0.8</version>
</dependency>
<dependency>
<groupId>org.archive</groupId>
<artifactId>heritrix</artifactId>
<version>1.14.3</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>org.kohsuke</groupId>
<artifactId>args4j</artifactId>
<version>2.0.10</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-core</artifactId>
<version>0.21.0-SNAPSHOT</version>
<scope>provided</scope>
<exclusions>
<exclusion>
<artifactId>jetty</artifactId>
<groupId>org.mortbay.jetty</groupId>
</exclusion>
<exclusion>
<artifactId>jetty-util</artifactId>
<groupId>org.mortbay.jetty</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-mapred</artifactId>
<version>0.21.0-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>0.21.0-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<!-- Eclipse project generation dependencies -->
<dependency>
<groupId>ant-eclipse</groupId>
<artifactId>ant-eclipse-jvm1.2</artifactId>
<version>1.0</version>
<scope>eclipse</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
<version>2.4.1</version>
</dependency>
<dependency>
<groupId>cascading</groupId>
<artifactId>cascading-core</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>cascading</groupId>
<artifactId>cascading-test</artifactId>
<version>1.1.1</version>
</dependency>
</dependencies>
</dependencyManagement>
`
【问题讨论】:
【参考方案1】:您已将 hadoop jar 指定为范围为 <scope>provided</scope>
的依赖项。
这意味着它们将在运行时位于类路径中,如果您希望它们包含在您的 jar 中,则删除范围标记并接受 compile 的默认范围。
见http://maven.apache.org/pom.html
【讨论】:
以上是关于通过maven创建jar的问题的主要内容,如果未能解决你的问题,请参考以下文章
关于用maven创建的springboot工程打包jar后找不到配置文件的问题