1

我需要能够允许我的 Maven 包在两种情况下执行。

  1. 用户需要从命令行执行 jar 以从用户执行 java -jar myjar.jar 时出现的 AWT 对话框生成许可证密钥

  2. 当客户端项目将 myjar 作为依赖项引用时,myjar 还需要下载其所有传递依赖项(以“正常”的 maven 方式)。

场景 1 需要将 AWT 表单 jar 打包,以便弹出 AWT 对话框。
方案 2 要求在构建客户端项目时下载所有其他依赖项。

我如何包装它以使其尽可能小?

我已经独立尝试了 jar-plugin、shade-plugin 和 assembly-plugin,但运气不佳。

JAR-PLUGIN:
将 forms-1.2.1.jar 放在 lib/ 目录中并将其添加到类路径中不起作用,因为 java -jar myjar.jar 不会在命令行中加载它

SHADE-PLUGIN:
下载互联网。如何排除一些依赖项?

ASSEMBLY-PLUGIN:
下载互联网。如何排除一些依赖项?

有没有办法打包 forms-1.2.1.jar 的传递依赖项(对于场景 1)但在打包时排除所有其他依赖项,以便在客户端项目构建时下载它们(对于场景 2)。

jar-plugin 或 assembly-plugin 可以做到这一点吗?

4

1 回答 1

0

对以下内容的看法:

<project>
  [...]
  <build>
    [...]
    <plugins>
      <plugin>
        <!-- NOTE: We don't need a groupId specification because the group is
             org.apache.maven.plugins ...which is assumed by default.
         -->
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.5.2</version>
        <configuration>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
        </configuration>
        [...]
</project>

这将生成一个包含所有依赖项的 jar 文件,并可以从命令行调用它,但要使其正常工作,您需要一个补充部分:

<project>
  [...]
  <build>
    [...]
    <plugins>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.5.2</version>
        <configuration>
          [...]
          <archive>
            <manifest>
              <mainClass>org.sample.App</mainClass>
            </manifest>
          </archive>
        </configuration>
        [...]
      </plugin>
      [...]
</project>
于 2014-12-19T17:15:38.253 回答