java - 从 Java 多项目构建 Gradle rmp
问题描述
我正在尝试通过 Gradle 从 java 源代码构建一个 RPM Centos 7 包。我有一个带有共享库和 Java 应用程序的 Java 多项目环境。这是文件系统:
|-- automation
build.gradle
settings.gradle
|-- datalib
|-- build
|-- libs
datalib-1.0.jar
|-- src
|-- main
|-- it
|-- datalib
build.gradle
settings.gradle
|-- metrics
|-- build
|-- distributions
metrics-1.0.rpm
|-- libs
metrics-1.0.jar
|-- src
|-- main
|-- it
|-- metrics
build.gradle
settings.gradle
自动化settings.gradle
是:
rootProject.name = 'automation'
include 'metrics'
include 'datalib'
自动化build.gradle
是:
allprojects {
apply plugin: 'java'
apply plugin: 'eclipse'
sourceCompatibility = 1.11
targetCompatibility = 1.11
repositories {
mavenCentral()
}
}
subprojects {
version = '1.0'
dependencies {
implementation group: 'commons-cli', name: 'commons-cli', version: '1.4'
implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.13.1'
implementation group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.13.1'
testImplementation 'junit:junit:4.12'
}
}
project(':metrics'){
dependencies{
implementation project(':datalib')
}
}
我想从metrics
项目中构建 RPM,包括RPMdatalib
中的库。我已经编写了这个 Gradlebuild.gradle
文件,但它不起作用:
// apply plugin: 'application'
plugins {
id "application"
id "nebula.ospackage" version "8.3.0"
id 'com.palantir.git-version' version '0.12.3'
}
dependencies {
testImplementation group: 'org.apache.commons', name: 'commons-csv', version: '1.6'
}
ospackage {
def details = versionDetails()
packageName = 'metrics'
license = 'Proprietary Software'
description = 'Events Analytics Software'
version = details.lastTag
release = details.commitDistance + 1 + '.' + details.gitHash
arch = X86_64
os = LINUX
type = BINARY
user 'root'
fileMode 0644
requires('java', '1.9', GREATER | EQUAL)
vendor 'xxx'
directory('/etc/metrics', 755)
from(jar.outputs.files) {
into '/usr/share/metrics'
}
from(':datalib:/build/libs') {
into '/usr/share/metrics'
}
}
// Define the main class for the application
mainClassName = 'it.fox.metrics.App'
我拥有的 RPM 不包含该datalib
库
MacBook-Pro:distributions fox$ rpm -qlp metrics-1.0~471-262.f5ad4a18ca.x86_64.rpm
/usr/share/metrics
/usr/share/metrics/metrics-1.0.jar
如何包含我的共享库?
谢谢
解决方案
我找到了解决我的问题的方法。我在这里发布解决方案,也许可以帮助某人。解决方案是使用 Gradle configurations
api。我的 Gradle 配置变为:
// apply plugin: 'application'
plugins {
id "application"
id "nebula.ospackage" version "8.3.0"
id 'com.palantir.git-version' version '0.12.3'
}
dependencies {
testImplementation group: 'org.apache.commons', name: 'commons-csv', version: '1.6'
}
ospackage {
def details = versionDetails()
packageName = 'metrics'
license = 'Proprietary Software'
description = 'Events Analytics Software'
version = details.lastTag
release = details.commitDistance + 1 + '.' + details.gitHash
arch = X86_64
os = LINUX
type = BINARY
user 'root'
fileMode 0644
requires('java', '1.9', GREATER | EQUAL)
vendor 'xxx'
directory('/etc/metrics', 755)
from(configurations.runtimeClasspath) {
into '/usr/share/metrics'
}
}
希望这可以帮助某人。
推荐阅读
- r - 按列号从旧数据帧制作新数据帧
- regex - [ABC]、ABC 和 ABCxx 等模式的正则表达式,其中 xx 是数字
- ruby-on-rails - Rails:执行查询时出现 ORA-00911 错误,复制和粘贴时不出现
- matlab - 在 Matlab 图中动态绘制数据
- node.js - 如何将文件上传到 REST 端点?
- robotframework - 我的机器人框架 jar 文件在 maven install 命令后具有依赖项显示为损坏文件,请协助
- python - pd.get_dummies() 用于具有多索引列的 DataFrame
- python-3.x - 如何仅将文件名(不是整个直接名称+文件名)上传到谷歌存储桶
- python - 从不可逆的函数中查找多个插值 x 值
- python - Python Selenium:单击网站表格中的每条记录后如何抓取结果