Maven仓库(公共或私有)中的JRE 1.6

12

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

如果没有,有人能否提供一些提示如何将JRE部署到Maven仓库中?


你具体希望这个怎么工作? - Thorbjørn Ravn Andersen
1
我需要将JRE放入我的Maven构建分发中。我可以在构建过程中下载它,但无法保证Oracle会将JRE分发放在相同的位置...这就是为什么我考虑将JRE放入我的Maven存储库中(因为毕竟JRE是一个二进制文件 :))。也许这是个坏主意,从Oracle网站自动下载可能更好... - Alex
这个要求听起来有点古怪。你是在说你的可部署文件应该能够在没有JRE安装的系统上运行吗? - Perception
知道你正在构建哪个平台会有所帮助。 - Zac Thompson
分发JRE与您的软件之一的问题是,如果Oracle允许您重新分发他们的软件包,您可能需要签署某种文件。 - feniix
显示剩余4条评论
3个回答

13

这是我找到的解决方案:

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

<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文件而不解压缩它们,则可以使用"copy"目标代替"unpack"。


2
你为什么不使用分类器而是使用构件呢?毕竟,分类器的作用就是精确区分不同的架构。 - Riduidel

1

你的需求是一个比较合理的使用场景。但在我看来,将其放入maven-repo并不是解决问题的正确方式。

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

即使您将JRE托管在m2-repo中,也存在某些安全问题。JRE是一款敏感程序。即使您说您已经从Oracle托管了相同的JRE,我仍然更愿意从Oracle下载它。


感谢您的评论。我确实倾向于从Oracle下载它,但他们只有RPM和EXE文件,而我需要ZIP版本。对我来说另一个选择是使用JavaWebStart来传递应用程序,而不是创建分发包,但那是另一个话题。 - Alex

-2

这里可以阅读如何将jar安装到Maven仓库中。但是为什么要在Maven仓库中安装JRE的jar包呢?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接