3

我正在从蚂蚁切换到Maven。

为了简单起见,我的应用程序是一个连接到数据库的摇摆应用程序。我希望它被打包在一个 jar 文件中。
该应用程序需要一个外部库,即 Microsoft sql server 库,包含在一个 jar 文件中:sqljdbc4-3.0.jar。

所以我尝试包含这个库:

    <dependency>
        <groupId>com.microsoft.sqlserver</groupId>
        <artifactId>sqljdbc4</artifactId>
        <version>3.0</version>
    </dependency>

但是在启动 jar 时,我得到了异常:

java.lang.SecurityException: Invalid signature file digest for Manifest main attributes

这个问题已经记录在其他 stackoverflow 问题中;我说这个只是为了切入正题。我的想法(也许很天真)如下,我想

  • 只用我的代码创建一个 jar。
  • 创建一个包含我所有库的目录(lib)中的发行版。
  • 清单文件以正确引用所有库。

环顾四周,我发现每个问题都是由不同的 maven 插件执行的:jar 插件、依赖插件和程序集插件。
这是要走的路吗?
我觉得不对,因为我不知道 maven 可以轻松处理“常规”配置,而这三个插件的解决方案似乎有点过于复杂。

4

2 回答 2

6

您需要将这些插件添加到 pom

        <plugin>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib</classpathPrefix>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <descriptor>src/main/assembly/assembly.xml</descriptor>
            </configuration>
        </plugin>

src/main/assembly/assembly.xml

<assembly>
    <id>assembly</id>
    <formats>
        <format>zip</format>
    </formats>
    <dependencySets>
        <dependencySet>
            <outputDirectory>/lib</outputDirectory>
            <unpack>false</unpack>
        </dependencySet>
    </dependencySets>
</assembly>

运行程序集

mvn clean package assembly:single
于 2013-06-07T12:40:26.060 回答
1

这是行家的方式。顺便说一句:jar 插件和依赖插件总是包含在 Maven 构建中,应该不需要配置它们。

此外,一个很好的帮助可能是创建可分发的appassembler ,其中包括所需的所有 jar 文件。

于 2013-06-07T10:21:44.017 回答