java - 如何从将应用程序注册到systemd的Java gradle项目中获取deb包

标签 java gradle systemd

如何从Java Gradle项目中获取deb包,deb文件安装后自动生成/etc/systemd/system/project.service,并在/中添加二进制文件var/project/bin/,以及 /etc/project/ 中的配置文件。
类似于 https://github.com/nebula-plugins/gradle-ospackage-plugin但有 systemd 支持。 抱歉英语不好!

最佳答案

我发现我可以使用nebula-plugin所提到的问题。
我只需将此行添加到 build.gradle 文件中:

buildDeb {
  link('/etc/systemd/system/project.service', '/opt/project/bin/project.service')
}

并创建一个 project.service 文件,如下所示,并使插件将服务文件移动到 deb 包的安装目录:

[Unit]
Description=<description>

[Service]
User=<user>
Group=<group>
EnvironmentFile=-/etc/default/project
ExecStart=/opt/project/bin/project > /var/log/project/project.log
Restart=no

[Install]
WantedBy=multi-user.target

下面的代码将复制服务文件(如果将其放在项目根目录的bin目录中)以及所有其他必需的文件到deb文件的安装目录:

ospackage {
  packageName = 'project'

  configurationFile "/opt/project/bin/project.service"

  into '/opt/project'

  from(jar.outputs.files) {
    into 'lib'
  }
  from(configurations.runtime) {
    into 'lib'
  }
  from('build/libs') {
    into 'lib'
  }
  from('conf'){
    into 'conf'
  }
  from('bin') {                      //project.service is in bin directory
    fileType = CONFIG | NOREPLACE    //wont replace any configurationFile in this directory
    into 'bin'
  }
  from('build/scripts') {
    into 'bin'
    exclude 'database'
    fileMode = 0550
  }
}

关于java - 如何从将应用程序注册到systemd的Java gradle项目中获取deb包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50432887/

相关文章:

java - 将 python 与其他语言(.Net、Java ....)集成的机制是什么

java - 在个人资料中编辑显示名称时如何存储重复共享首选项

android - 特拉维斯安卓构建错误

android - 在 Android Gradle 任务中获取编译后的 .class 输出目录

持续监控 Systemd 日志

作为 systemd 服务运行时,Python 脚本不会写入文件

ubuntu-16.04 - 如何忽略 Systemd 中 'ExecStart' 的失败

java - 使用 JSON Sanitizer 清理来自 Spring MVC Controller 的响应 JSON?

java - Java中多线程的实现

android - Gradle:任务 compileReleaseAidl 执行失败