【问题标题】:JRE 1.6 in Maven repository (public or private)Maven 存储库中的 JRE 1.6(公共或私有)
【发布时间】:2011-12-16 21:36:35
【问题描述】:

我们可以在 Nexus 中代理的一些公共 Maven 存储库中是否有可用的 JRE 1.6?

如果没有,有人可以提供有关如何将 JRE 部署到 Maven 存储库的提示吗?

【问题讨论】:

  • 这是一个奇怪的要求。 JRE 不完全是像 jar 这样的库。我不确定这是否可能。
  • 您希望它如何工作?
  • 我需要将 JRE 放入我的 maven 构建中的分配器中。我可以将它作为构建过程的一部分下载,但不能保证 Oracle 会将 JRE 发行版保存在相同的位置......这就是我考虑将 JRE 放入我的 maven 存储库的原因(因为 JRE 之后是二进制的东西全部 :) )。也许这是一个坏主意,从 Oracle 网站自动下载会更好......
  • 这个要求有点奇怪。您是说您的可部署组件应该能够在未安装 JRE 的系统上工作吗?
  • 很抱歉在原始请求中不够清楚。我需要的是 - 使用我的 Web 应用程序创建一个分布式,加上将 Jetty 服务器放在那里,再加上 JRE。目标是简化用户的生活:只需下载我的 ZIP 发行版,解压缩并运行一些批处理文件,这将使用打包的 JRE 启动 Jetty(以避免在没有安装 JRE 时出现问题,因此应用程序无法运行)。

标签: maven java


【解决方案1】:

这是我找到的解决方案:

  • 压缩 JRE(jre-linux32-1.6.0.23.zip 和 jre-jre-win32-1.6.0.zip 在 我的情况)。
  • 通过 Web UI 将它们上传到您的 Nexus 存储库(或使用“mvn”手动部署),设置工件参数:groupid="oracle" artifactid="jre-win32" / "jre-linux32",设置 正确的版本和包装类型“zip”。
  • 修改您的 pom.xml 以在构建期间下载并解压缩依赖项(我将其绑定到“准备包”阶段)。

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.4</version>
                <executions>
                    <execution>
                        <id>copy</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>unpack</goal>
                        </goals>
                        <configuration>
                            <artifactItems>
                                <artifactItem>
                                    <groupId>oracle</groupId>
                                    <artifactId>jre-win32</artifactId>
                                    <version>1.6.0.23</version>
                                    <type>zip</type>
                                    <overWrite>false</overWrite>
                                    <outputDirectory>${project.build.directory}/alternateLocation</outputDirectory>
                                    <!--<destFileName>optional-new-name.jar</destFileName>-->
                                </artifactItem>
                                <artifactItem>
                                    <groupId>oracle</groupId>
                                    <artifactId>jre-linux32</artifactId>
                                    <version>1.6.0.23</version>
                                    <type>zip</type>
                                    <overWrite>false</overWrite>
                                    <outputDirectory>${project.build.directory}/alternateLocation</outputDirectory>
                                    <!--<destFileName>optional-new-name.jar</destFileName>-->
                                </artifactItem>
                            </artifactItems>
                            <outputDirectory>${project.build.directory}/wars</outputDirectory>
                            <overWriteReleases>false</overWriteReleases>
                            <overWriteSnapshots>true</overWriteSnapshots>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    

就是这样。 JRE 将被下载并解压到 target\alternateLocation 文件夹。

如果您只想复制 ZIP 文件而不提取它们,则可以使用“复制”目标而不是“解压缩”。

【讨论】:

  • 你为什么不使用分类器而不是工件?毕竟分类器正是在这里区分不同的架构。
【解决方案2】:

您的要求在某种程度上是有效的用例。但是恕我直言,将其放入 maven-repo 并不是这样做的方法。

其他应用程序通过直接从提供程序获取可执行文件来实现此要求。例如,像 Hudson/Jenkins 这样的构建服务器需要在用户选择时下载 Java/Maven,AFAIR Jenkins 直接从 Oracle 站点下载它们。 (因为 oracle 要求您在下载之前登录,所以他们使用 SSO 机制)。 沿着这些路径的类似解决方案将适合您。

即使您将 JRE 托管在 m2-repo 中,也存在一定的安全问题。 JRE 是一个敏感程序。即使您说您从 oracle 托管了相同的 JRE,我也宁愿从 oracle 下载它。

【讨论】:

  • 感谢您的评论。我确实倾向于从 Oracle 下载它,但它们只有 RPM 和 EXE 文件,而我需要一个 ZIP 版本。对我来说,另一个选择是使用 JavaWebStart 来交付应用程序,而不是创建分发,但这是一个不同的主题。
【解决方案3】:

Here 你可以阅读如何将 jar 安装到 maven repo 中。但是为什么要在 maven 存储库中安装 JRE jar?

【讨论】:

    猜你喜欢
    • 2022-12-19
    • 2012-06-10
    • 2020-02-21
    • 2016-10-18
    • 2017-08-18
    • 1970-01-01
    • 2011-12-27
    • 2011-01-27
    • 2012-02-02
    相关资源
    最近更新 更多