2

到目前为止,我用 Ant 制作了可运行的 jar,并且没有任何问题。
但是我现在尝试 mavenize 我的项目,我真的不知道如何用这个工具做可运行的 jar。
我已经阅读了大量的教程(也在这里,在 Stackoverflow 上)、帮助、建议和......什么都没有。就我而言,它们都不起作用,这可能意味着我不了解一些基础知识。
我有这样一个简单的项目:

我的项目

这是应用程序,女巫使用 mysql-connector-java-5.1.24-bin.jar(放置在“lib”目录中)连接到 MySQL 数据库。
我想将此 jar 包含到最终 jar (DBPreformatter.jar) 中。我在许多配置中使用了汇编和着色插件,但他们从未将此 jar 添加到 DBPreformatter.jar 中。

这是我的 pom.xml:

<modelVersion>4.0.0</modelVersion>
<groupId>com.icd4you</groupId>
<artifactId>DBPreformatter</artifactId>
<version>1.0.0</version>
<name>DBPreformatter</name>
<description>DB processing and cleaning tool</description>
<packaging>jar</packaging>
<dependencies>
    <dependency>
        <groupId>mysql-connector-java-5.1.24-bin</groupId>
        <artifactId>mysql-connector-java-5.1.24-bin</artifactId>
        <version>5.1.24</version>
        <scope>system</scope>
        <systemPath>${basedir}/lib/mysql-connector-java-5.1.24-bin.jar</systemPath>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>

        <!-- WHAT SHOULD I USE HERE? -->

    </plugins>
</build>

如何解决这个问题呢?

4

2 回答 2

4

有一个 Maven 插件Apache Maven Shade Plugin可以为你构建一个 uber jar

于 2014-09-23T11:43:08.410 回答
3

添加带有描述符的Maven Assembly 插件jar-with-dependencies

<build>
    <plugins>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
                <archive>
                    <manifest>
                        <mainClass>com.pany.your.MainClass</mainClass>
                    </manifest>
                </archive>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

请注意,这不会添加 JAR;相反,它会解压缩所有列为依赖项的 JAR,并将它们的内容添加到生成的 JAR 中(因此您将在结果中看到 MySQL JAR 中的所有类文件,而不是 MySQL JAR 本身)。

编辑有一个警告,但是:Maven 忽略 JAR 以scope=system进行许多操作。另请参阅:如何在 maven jar 构建过程中包含外部 jar?

如果 Maven 没有将 JAR 添加到输出中,那么您必须使用该命令将具有此范围的所有 JAR 安装到本地 maven repo ( $HOME/.m2/repository) 中。mvn install:file-install请参阅http://maven.apache.org/plugins/maven-install-plugin/usage.html如何做到这一点。

注意:在本地 repo 中安装库是首选方式;你真的应该考虑一下。一方面,这scope=system将不再让您感到困惑(因为许多插件以特殊方式处理它们)。另外,您只需执行一次。之后,您可以在许多 Maven 项目中使用这个库。

在安装之前,您应该检查http://search.maven.org/以查看 Maven 是否不知道依赖项。

MySQL是:http ://search.maven.org/#artifactdetails%7Cmysql%7Cmysql-connector-java%7C5.1.32%7Cjar

于 2014-09-23T11:55:28.630 回答