Rodar um aplicativo java como serviço
Queria saber como abrir um programa quando inicializa ou reinicializa com Java? Quando inicia ou reinicia o Linux, automaticamente abre o programa. Sem clicar nele. Abre automaticamente quando o Linux estiver iniciando. Quero usar com o Java, tanto no Linux, Windows e MacOS.
Para que um aplicativo Java seja iniciado automaticamente quando o
sistema operacional ligar, o ideal é configurar o próprio sistema
operacional para executar o arquivo .jar
ou um script que o execute.
A forma mais profissional é criar um serviço do systemd.
Crie:
sudo nano /etc/systemd/system/meuapp.service
Conteúdo:
[Unit]Description=Meu Aplicativo JavaAfter=network.target[Service]Type=simpleUser=usuarioWorkingDirectory=/home/usuario/meuappExecStart=/usr/bin/java -jar /home/usuario/meuapp/MeuApp.jarRestart=always[Install]WantedBy=multi-user.target
sudo systemctl daemon-reloadsudo systemctl enable meuapp.servicesudo systemctl start meuapp.service
Verificar:
O programa iniciará automaticamente após cada boot.
Crie um arquivo:
Coloque-o em:
Sempre que o usuário fizer login, o programa abrirá.
Use o software:
WinSW (Windows Service Wrapper)
ou
Assim o Java será iniciado automaticamente mesmo sem login do usuário.
Crie:
Conteúdo:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN""http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict><key>Label</key><string>com.meuapp</string><key>ProgramArguments</key><array><string>/usr/bin/java</string><string>-jar</string><string>/Users/usuario/MeuApp/MeuApp.jar</string></array><key>RunAtLoad</key><true/></dict></plist>
Ativar:
O aplicativo será iniciado automaticamente quando o macOS iniciar.
O Java não possui uma API padrão que permita registrar automaticamente um programa como serviço em Linux, Windows e macOS ao mesmo tempo.
O mais comum é detectar o sistema operacional:
String os = System.getProperty("os.name").toLowerCase();
if (os.contains("win")) {
System.out.println("Windows");
} else if (os.contains("mac")) {
System.out.println("macOS");
} else {
System.out.println("Linux");
}
e durante a instalação criar:
Linux → serviço systemd
LaunchAgent

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Window {
public JFrame janela;
public JButton botao;
public void Window() {
janela = new JFrame();
janela.setTitle("Hello World Example");
janela.setSize(200, 200);
janela.setLocation(500, 260);
Image Icone = Toolkit.getDefaultToolkit().getImage("icone.png");
janela.setIconImage(Icone);
// janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
janela.setLayout(null);
botao = new JButton();
botao.setText("Hi!");
botao.setBounds(25, 10, 150, 25); // objeto.setBounds(esquerda, topo, largura, altura)
janela.add(botao);
botao.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null, "Hello World!");
}});
janela.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}});
janela.setVisible(true);
}
public static void main(String[] args) {
Window jx = new Window();
jx.Window();
}
}
}
| java-jar.bat |
| c:\javac\jdk\bin\javac -source 1.8 -target 1.8 -encoding UTF-8 Window.java c:\javac\jdk\bin\jar cvfm WindowJAR.jar manifest.txt *.class |
| manifest.txt |
| Manifest-Version: 1.0 Main-Class: Window Created-By: 10.0.1 (Iatagan Cursos) |