Maven 程序集:包含 JDBC

发布于 2024-12-11 00:44:15 字数 3301 浏览 0 评论 0原文

我正在尝试从 Maven 项目构建单个 .jar 文件,其中包含所有必要的依赖项。因此,.jar 应该在缺少库的计算机上运行。

在我的 pom.xml 中:

   <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.15</version>
        <exclusions>
            <exclusion>
                <groupId>com.sun.jmx</groupId>
                <artifactId>jmxri</artifactId>
            </exclusion>
            <exclusion>
                <groupId>com.sun.jdmk</groupId>
                <artifactId>jmxtools</artifactId>
            </exclusion>
            <exclusion>
                <groupId>javax.jms</groupId>
                <artifactId>jms</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.hsqldb</groupId>
        <artifactId>hsqldb</artifactId>
        <version>2.2.4</version>
    </dependency>
  </dependencies>

在 pom.xml 的部分中,我使用了 assembly-plugin:

  <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
          <descriptors>
            <descriptor>src/assemble/exe.xml</descriptor>
          </descriptors>
          <archive>
            <manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile>
          </archive>
        </configuration>
  </plugin>

“src/assemble/exe.xml” 文件:

<assembly>
  <id>exe</id>
  <formats>
    <format>jar</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <dependencySets>
    <dependencySet>
      <outputDirectory></outputDirectory>
      <outputFileNameMapping></outputFileNameMapping>
      <unpack>true</unpack>
      <scope>runtime</scope>
      <includes>
        <include>log4j:log4j</include>
        <include>hsqldb:hsqldb</include>
      </includes>
    </dependencySet>
  </dependencySets>
  <fileSets>
    <fileSet>
      <directory>target/classes</directory>
      <outputDirectory></outputDirectory>
    </fileSet>
  </fileSets>
</assembly>

整个构建过程完美运行(使用 Eclipse 和 m2e)。 我在输出中提到了以下行:

[INFO] Reading assembly descriptor: src/assemble/exe.xml
[WARNING] The following patterns were never triggered in this artifact inclusion filter:
o  'hsqldb:hsqldb' 

Calling the result .jar with java -jar 结果.jar 无法加载/找不到 HSQLDB JDBC 驱动程序。由于控制台上有正常的 (System.out.println) 和 log4j 输出,我怀疑只有 hsqldb 库丢失。

如何使用 Maven assembly-plugin 将它们包含在 .jar 中? (我的系统:Eclipse Indigo,m2e 1.0.100.20110804,Maven 3.0.2,Java 1.6.0.26)

I'm trying to build a single .jar file from a Maven project which includes every necessary dependency. Therefore the .jar should run on a computer with missing libraries.

The in my pom.xml:

   <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.15</version>
        <exclusions>
            <exclusion>
                <groupId>com.sun.jmx</groupId>
                <artifactId>jmxri</artifactId>
            </exclusion>
            <exclusion>
                <groupId>com.sun.jdmk</groupId>
                <artifactId>jmxtools</artifactId>
            </exclusion>
            <exclusion>
                <groupId>javax.jms</groupId>
                <artifactId>jms</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.hsqldb</groupId>
        <artifactId>hsqldb</artifactId>
        <version>2.2.4</version>
    </dependency>
  </dependencies>

In the part of the pom.xml I use the assembly-plugin:

  <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
          <descriptors>
            <descriptor>src/assemble/exe.xml</descriptor>
          </descriptors>
          <archive>
            <manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile>
          </archive>
        </configuration>
  </plugin>

The "src/assemble/exe.xml" file:

<assembly>
  <id>exe</id>
  <formats>
    <format>jar</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <dependencySets>
    <dependencySet>
      <outputDirectory></outputDirectory>
      <outputFileNameMapping></outputFileNameMapping>
      <unpack>true</unpack>
      <scope>runtime</scope>
      <includes>
        <include>log4j:log4j</include>
        <include>hsqldb:hsqldb</include>
      </includes>
    </dependencySet>
  </dependencySets>
  <fileSets>
    <fileSet>
      <directory>target/classes</directory>
      <outputDirectory></outputDirectory>
    </fileSet>
  </fileSets>
</assembly>

The whole build process works flawlessly (using Eclipse and m2e).
I mentioned the following line in the output:

[INFO] Reading assembly descriptor: src/assemble/exe.xml
[WARNING] The following patterns were never triggered in this artifact inclusion filter:
o  'hsqldb:hsqldb' 

Calling the resulting .jar with
java -jar result.jar
the HSQLDB JDBC driver can't be loaded / was not found. As there is normal (System.out.println) and also log4j output on the console, I suspect that only the hsqldb libraries are missing.

How can they be included in the .jar with Maven assembly-plugin?
(My System: Eclipse Indigo, m2e 1.0.100.20110804, Maven 3.0.2, Java 1.6.0.26)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

云之铃。 2024-12-18 00:44:15

请注意,HSQLDB JDBC 驱动程序的工件名称将是 org.hsqldb:hsqldb不是 hsqldb:hsqldb 正如您在 exe.xml。解决这个问题!

Note that the artifact name of the HSQLDB JDBC driver would be org.hsqldb:hsqldb and not hsqldb:hsqldb as you wrote in your exe.xml. Fix that!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文