【问题标题】:Building an RPM containing JDK dependency resolution构建一个包含 JDK 依赖解析的 RPM
【发布时间】:2014-03-11 00:23:19
【问题描述】:

我正在使用来自 jdk 的 zip 文件分发的 maven 和 nexus 将 oracle jdk 1.6 构建到 rpm 中。

完成后,如果没有以下内容,rpm 会拒绝安装:

[root@build]# rpm -ivh oracle-jdk-1.6.0_26-1.noarch.rpm
error: Failed dependencies:
        libXt.so.6()(64bit) is needed by oracle-jdk-1.6.0_26-1.noarch
        libodbc.so()(64bit) is needed by oracle-jdk-1.6.0_26-1.noarch
        libodbcinst.so()(64bit) is needed by oracle-jdk-1.6.0_26-1.noarch

很好。我猜maven创建了这个依赖。原生解压缩形式的 jdk 工作正常。

如何配置我的 pom 使 maven 不会解决这些依赖关系?

如何配置我的 pom 以便 yum -y install 安装缺少的库?

我都问了,因为我不确定我会朝哪个方向摇摆。

编辑:我的 pom:

<?xml version="1.0"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.oracle</groupId>
  <artifactId>jdk</artifactId>
  <version>1.6.0_26</version>
  <packaging>pom</packaging>
  <properties>
    <unix.user>root</unix.user>
    <rpm.friendly.name>oracle-jdk</rpm.friendly.name>
    <rpm.install.basedir>/usr/java/jdk/1.6.0_26</rpm.install.basedir>
    <sourcefile.unzip.dir>${project.build.directory}/jdk1.6.0_26</sourcefile.unzip.dir>
    <yum.repo.host>localhost</yum.repo.host>
    <yum.repo.path>/apps/httpd/yumrepo</yum.repo.path>
  </properties>
  <dependencies>
    <dependency>
      <groupId>com.oracle</groupId>
      <artifactId>jdk</artifactId>
      <version>1.6.0_26</version>
      <type>tar.gz</type>
    </dependency>
  </dependencies>
  <distributionManagement>
    <repository>
      <id>ssh-repository</id>
      <url>scpexe://${yum.repo.host}${yum.repo.path}</url>
    </repository>
  </distributionManagement>
  <build>
    <extensions>
      <extension>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-ssh-external</artifactId>
        <version>1.0-beta-6</version>
      </extension>
    </extensions>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>rpm-maven-plugin</artifactId>
        <version>2.1-alpha-3</version>
        <executions>
          <execution>
            <id>generate-rpm</id>
            <goals>
              <goal>attached-rpm</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <name>${rpm.friendly.name}</name>
          <copyright>2014, JM</copyright>
          <group>Application/Internet</group>
          <packager>JM</packager>
          <needarch>false</needarch>
          <changelogFile>src/changelog</changelogFile>
          <mappings>
            <mapping>
              <directory>${rpm.install.basedir}</directory>
              <username>${unix.user}</username>
              <groupname>${unix.user}</groupname>
              <sources>
                <source>
                  <location>${sourcefile.unzip.dir}</location>
                </source>
              </sources>
            </mapping>
          </mappings>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>2.4</version>
        <executions>
          <execution>
            <id>unpack</id>
            <phase>generate-resources</phase>
            <goals>
              <goal>unpack-dependencies</goal>
            </goals>
            <configuration>
              <outputDirectory>${project.build.directory}</outputDirectory>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  <repositories>
    <repository>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
      <id>thirdparty</id>
      <url>http://myrepo.com:8081/nexus/content/repositories/thirdparty</url>
    </repository>
  </repositories>
</project>

【问题讨论】:

  • 你能展示你到目前为止所做的事情吗?
  • 我已将我的 pom 添加到问题中
  • 我在 generate-resources 阶段的 中尝试了 **/db/* 。没有快乐。

标签: maven dependencies rpm


【解决方案1】:

基本上我认为在你的包中包含其他二进制文件(如 java)不是一个好主意
我宁愿依赖他们。

但有时您必须这样做,例如客户已经在他的机器上安装了 Java,但您想运行自己的 Java 版本并因此将其与您的包一起提供。

为此,您可以简单地告诉 maven 插件不要自动向这些包添加要求。

喜欢这个

<configuration>  
     ......
     <autoRequires>false</autoRequires>
</configuration>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-25
    • 2016-03-24
    • 2012-10-24
    • 2014-03-24
    • 1970-01-01
    • 2011-12-04
    • 2014-12-09
    • 2016-03-31
    相关资源
    最近更新 更多