通过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.pluginsmaven-compiler-plugin2.3.1版本>1.61.6配置>插件>org.apache.maven.pluginsmaven-assembly-plugin2.2-beta-4jar-with-dependenciescom.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 指定为范围为 &lt;scope&gt;provided&lt;/scope&gt; 的依赖项。 这意味着它们将在运行时位于类路径中,如果您希望它们包含在您的 jar 中,则删除范围标记并接受 compile 的默认范围。

见http://maven.apache.org/pom.html

【讨论】:

以上是关于通过maven创建jar的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Maven 创建具有依赖关系的可执行 JAR?

idea创建maven项目慢的原因以及解决方案

关于用maven创建的springboot工程打包jar后找不到配置文件的问题

spring-boot Maven:如何使用主类创建可执行 jar?

通过maven下载jar包

创建maven父子项目