Nesse tutorial você vai aprender como criar um serviço no windows utilizando o plugin do maven chamado appassembler.
Para que possamos criar um Serviço e registrá-lo no Painel de Serviços do Windows, precisamos criar um programa que se comporte de tal forma, para isso vamos criar um exemplo de um Servidor de Datas feito em java e utilizando a api de Sockets do Java.
Abaixo o código da classe que será o nosso serviço, ficando responsável por retorna a data e hora corrente do Sistema:
package br.com.javadev.appassembler;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;
public class TimerServer {
public static void main(String[] args) {
try {
start();
} catch (IOException ioe) {
System.out.println("Error: " + ioe.getMessage());
}
}
public static void start() throws IOException {
ServerSocket listener = new ServerSocket(5000);
try {
while (true) {
Socket socket = listener.accept();
try {
PrintWriter out =
new PrintWriter(socket.getOutputStream(), true);
out.println(new Date().toString());
} finally {
socket.close();
}
}
}
finally {
listener.close();
}
}
}Feito isso, vamos configurar o plugin appassembler dentro do pom.xml do projeto
O próximo passo é configurar no pom do projeto o plugin, para isso vamos adicionar o trecho abaixo na sessão build / plugins
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>appassembler-maven-plugin</artifactId>
<version>1.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>generate-daemons</goal>
</goals>
</execution>
</executions>
<configuration>
<daemons>
<daemon>
<id>timer-service</id>
<mainClass>br.com.javadev.appassembler.TimerServer</mainClass>
<platforms>
<platform>jsw</platform>
</platforms>
</daemon>
</daemons>
</configuration>
</plugin>Configuramos a versão 1.4 do plugin, em seguida configurarmos para que ao executar a fase package do build seja executada a goal generate-daemons do plugin, que é responsável por gerar a estrutura para configuração do serviço. A parte mais importante fica dentro da tag configuration, referente a configuração dos daemons (Serviços), a tag id indica o nome da instalação do serviço, a tag mainClass define qual é a Classe que inicializa o serviço e configura o Daemon baseado no Java Service Wrapper e gera o script para administração do serviço.
Para gerar o daemon é bem simples, como configuramos no plugin que ele fosse executado na fase package do build, basta digitar o seguinte comando:
mvn package
Será gerado dentro da pasta target a seguinte estrutura:
--generated-resources
|--appassembler
|--jsw
|-- timer-service
| |-- bin
| | |-- timer-service
| | |-- timer-service.bat
| | |-- wrapper-linux-x86-32
| | |-- wrapper-macosx-universal-32
| | |-- wrapper-solaris-x86-32
| | |-- wrapper-windows-x86-32.exe
| | |-- wrapper.jar
| | `-- wrapper-windows-x86-32.dll
| |-- conf
| | `-- wrapper.conf
| `-- lib
| |-- libwrapper-linux-x86-32.so
| |-- libwrapper-macosx-universal-32.jnilib
| |-- libwrapper-solaris-x86-32.so
| |-- br
| | `-- com
| | `-- javadev
| | `-- appassembler
| | `-- appassembler
| | |-- 1.0
| | | `-- appassembler-1.0.jarPara finalizar, vamos instalar o serviço, iniciar e fazer um teste usando a ferramenta Telnet, se quiser você pode criar um client em java que acesse esse serviço (porta 5000) para obter a data e hora do sistema.
Vamos acessar dentro da pasta target o seguinte caminho:
cd target\generated-resources\appassembler\jsw\timer-service\bin
Em seguida digitar o seguinte comando:
timer-service.bat install
Será exibida a mensagem:
wrapper | Timer Service installed.
Acessar o Painel de Controle \ Ferramentas Administrativas \ Serviços e procurar por Timer Service

O nome é definido na tag name do pom.xml do projeto
<name>Timer Service</name>
O serviço será instalado no Painel de Serviço do Windows, você pode iniciar através do Painel de Serviços ou por linha de comando:
timer-service.bat start
Uma vez que o serviço esteja inicializado, podemos fazer um teste, para isso vamos utilizar a ferramenta telnet, digitando o comando:
telnet localhost 5000
Será exibida no prompt do DOS como resultado o timestamp

Para fazer o download do exemplo de uso do plugin appassembler, clique em: Exemplo do tutorial.