捆绑JRE以及可执行jar

时间:2017-07-08 06:17:05

标签: java bundle exe

我想将 JRE 捆绑在我的可执行jar.so中,该exe可以在任何系统中运行。 我尝试过 lunch4j 来创建捆绑的 JRE ,但我们需要发送 JRE 和exe两者。 但根据我的要求,我不应该使用任何安装程序。我不应该在客户端机器中提取jre。请帮助有一种方法将 JRE 放在jar中并使其使用。

2 个答案:

答案 0 :(得分:6)

您不能将JRE放在JAR文件中。 (嗯,你可以......但它无济于事。)

您需要做的是构建和分发安装程序。创建安装程序的推荐方法是使用商业或开源安装程序生成器。 (谷歌会帮你找到一个。)

也可以在ZIP文件中嵌入JRE,如下所述:

ZIP文件包含JRE和应用程序JAR以及它需要的其他文件。用户必须解压缩ZIP文件才能安装该应用程序。

  

..但它正在复制几乎100 MB的客户端系统中的总JRE。是否可以使JRE重量轻?

不是真的。分发JRE的最(合法)轻量级方法是分发Oracle Java安装程序。请注意Java二进制许可证禁止分发减少的JRE。如果你想沿着这条道路前进首先与律师交谈!!

使用嵌入式JRE分发Java应用程序可能是件坏事:

  • 它用多个JRE填充用户的磁盘。
  • JRE往往被隐藏起来/不可见于正常的安全更新/修补/审核。因此,他们往往成为担保责任。
  • 您需要定期更新您的可分发商......以避免在毫无戒心的用户身上造成过时/不安全的JRE。

答案 1 :(得分:0)

迟到总比没有好。我在pom.xml中使用了maven-shade-plugin,如下所示:

        <plugin>
          <artifactId>maven-shade-plugin</artifactId>
          <version>2.4.3</version>
          <configuration>
              <transformers>
                  <transformer
                    implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                  <transformer
                    implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                      <mainClass>${mainClass}</mainClass>
                  </transformer>
              </transformers>
              <!-- If false the shaded artifact takes the normal artifact name, such as,  "core-tools-1.0-SNAPSHOT.jar"-->
              <!-- Meanwhile, another non-shaded version takes the prefix Original, such as  "Original-core-tools-1.0-SNAPSHOT.jar"-->
            <shadedArtifactAttached>false</shadedArtifactAttached>
              <!-- Exclude signed Manifests from the UberJar -->
              <filters>
                  <filter>
                      <artifact>*:*</artifact>
                      <excludes>
                          <exclude>META-INF/*.SF</exclude>
                          <exclude>META-INF/*.DSA</exclude>
                          <exclude>META-INF/*.RSA</exclude>
                      </excludes>
                  </filter>
                  <filter>
                      <artifact>*:*</artifact>
                      <includes>
                          <include>sun/misc/**</include>
                      </includes>
                  </filter>
              </filters>
            </configuration>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                      <goal>shade</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>