Bula de Remédio

novembro 23, 2008

Criando arquivos JAR, WAR e EAR

Filed under: Configuração/Instalação — jadsonjs @ 8:23 pm

Esses três arquivos são os arquivos mais utilizados para distribuição de aplicações Java. Existem várias maneiras de se gerar esses arquivos, algumas IDEs Java como o NetBeans já faz tudo automático para você. Mas eu gosto de criar projetos básicos e gerar “na mão” os arquivos para ficar menos dependente da IDE, vai que de repente surge a necessidade de mudar de NetBeans para Eclipse ou vice-versa. Você pode criar seu projeto na estrutura que quiser dentro das IDEs, desde que final gere os arquivos na estrutura definida nesse artigo para a districuiçao das suas aplicacões.

Um arquivo JAR é apenas um arquivo compactado (igual a um arquivo.zip) que contém um diretório de configurações chamado META-INF com um arquivo MANIFEST.MF dentro dele.

|-META-INF

|        | – MANIFEST.MF

|- DIRETORIO_1

|         |- *.class

|- DIRETORIO_N

Segue um script ANT, que deve ficar na raiz do seu projeto, e que gera um arquivo nessa estrutura:


<?xml version="1.0" encoding="UTF-8"?>
<project name="Criando arquivo EAR " basedir="." default="init">

<!-- definindo as propriedades do arquivo JAR -->
<property name="src" value="src"/>
<property name="bin" value="bin"/>
<property name="libs" value="libs"/>
<property name="dist" value="dist"/>
<property name="jar.file" value="${dist}/exemplo.jar" />

<!-- definindo onde estao os JARs dos sistema para a compilacao -->
<path id="classpath.base">
<fileset dir="${libs}">
<include name="*.jar" />
</fileset>
</path>

<target name="init">
<echo>Iniciando build do arquivo JAR com Ant</echo>
</target>

<target name="clean" depends="init">
<delete dir="${bin}"></delete>
</target>

<target name="prepare" depends="init">
<mkdir dir="${bin}" />
</target>

<!-- compilando os .java do diretorio src -->
<target name="compile" depends="init, clean, prepare">
<echo>Compilando as classes do diretorio src</echo>
<javac srcdir="${src}" destdir="${bin}" verbose="false">
<classpath refid="classpath.base" />
</javac>
</target>

<!--cria o JAR  -->
<target name="criar JAR " depends="compile">
<echo>Gerando arquivo JAR  </echo>
<jar jarfile="${jar.file}">
<fileset dir="${bin}">
</fileset>
</jar>
</target>

</project>

Os arquivos WAR seguem a mesma linha de raciocínio, mas tem a estrutura um pouco mais complexa
por causa do diretório WEB-INF, onde estão as “informações” do módulo web. Qualquer arquivo na
estrutura que se segue pode ser “deployado” em um servidor de aplicação web java.

|-META-INF

|        | – MANIFEST.MF

| – WEB-INF

|         | – classes

|         |          |- pacotes.*.class

|         | – lib

|         |          |- *.jar

|         | – web.xml

|

|- DIRETORIO_1

|         |- *.jsp

|- DIRETORIO_N

|- index.jsp

|-index.html

Abaixo um script ANT para gerar um arquivo WAR:

<?xml version="1.0" encoding="UTF-8"?>
<project name="Criacao do arquivo WAR" basedir="." default="deploywar">

    <!-- definicao das propriedades dos arquivos -->
<property name="src" value="src"/>
<property name="bin" value="bin" />
<property name="libs" value="libs" />
<property name="warfile.name" value="dist/exemplo.war"/>
<property name="webappdir" value="web pages" />
<property name="webxml.file" value="${webappdir}/WEB-INF/web.xml"/>
<property name="webinf.dir" value="${webappdir}/WEB-INF" />
<property name="deploy.home" value="/home/.../jboss/server/default/deploy"/>

	<!-- definindo onde estao os JARs dos sistema -->
<path id="classpath.base">
		<fileset dir="${libs}">
			<include name="*.jar" />
		</fileset>
	</path>

	<target name="init">
		<echo>Iniciando build web do projeto</echo>
	</target>

	<target name="clean" depends="init">
		<delete dir="${bin}"/>
	</target>

	<target name="prepare" depends="init">
		<mkdir dir="${bin}" />
	</target>

	<target name="compile" depends="init, clean, prepare">
		<echo>Compilando classes</echo>
		<javac srcdir="${src}" destdir="${bin}" verbose="false">
			<classpath refid="classpath.base" />
		</javac>
	</target>

	<!-- cria um arquivo war -->
	<target name="criaWar" depends="compile">
		<echo>Gerando arquivo WAR</echo>

		<war warfile="${warfile.name}" webxml="${webxml.file}">
			<fileset dir="${webappdir}" >
				<include name="*.html" />
				<include name="*.jsp" />
			</fileset>

			<classes dir="${bin}" />
	<lib dir="${libs}">
				<exclude name="alcuma_jar_desnecessario_ao_modulo_web.jar" />
			</lib>

			<webinf dir="${webinf.dir}">
       			<include name="${webxml.file}" />
     		</webinf>

		</war>

	</target>

	<!-- faz o deploy no JBoss -->
	<target name="deploywar" depends="criaWar">

		<echo>Deploy do JBOSS</echo>
		<copy file="${warfile.name}" todir="${deploy.home}" />
	</target>

</project>

Para finalizar os arquivos EAR. São arquivos que, para variar, possuem um diretório META-INF e

podem possuir vários arquivos JARs e WARs dentro dele. Cada um com a sua própria estrutura

já citadas anteriormente.

Seguem também o script ANT que gera um EAR:

</pre>
<?xml version="1.0" encoding="UTF-8"?>
<project name="Criando arquivo EAR " basedir="." default="init">

 <!-- definicao das propriedades dos arquivos -->
<property name="src" value="src"/>
<property name="webappdir" value="web pages"/>
<property name="bin" value="bin"/>
<property name="libs" value="libs"/>
<property name="dist" value="dist"/>
<property name="deploy.home" value="/home/.../jboss-4.2.0.GA/server/default/deploy"/>

 <!-- definindo as propriedades do modulo web-->
<property name="warfile.name" value="${dist}/exemplo.war" />
<property name="webxml.file" value="${webappdir}/WEB-INF/web.xml" />
<property name="webinf.dir" value="${webappdir}/WEB-INF" />

 <!-- definindo as propriedades do ear-->
<property name="metainf.dir" value="META-INF" />
<property name="session.jar.file" value="${dist}/exemplo.jar" />
<property name="application.ear.file" value="${dist}/exemplo.ear" />

 <!-- definindo onde estao os JARs dos sistema para a compilacao -->
<path id="classpath.base">
 <fileset dir="${libs}">
 <include name="*.jar" />
 </fileset>
 </path>

 <target name="init">
 <echo>Iniciando build do Projeto EAR com Ant</echo>
 </target>

 <target name="clean" depends="init">
 <delete dir="${bin}"></delete>
 </target>

 <target name="prepare" depends="init">
 <mkdir dir="${bin}" />
 </target>

 <!-- compilando os .java do diretorio src -->
 <target name="compile" depends="init, clean, prepare">
 <echo>Compilando as classes do diretorio src</echo>
 <javac srcdir="${src}" destdir="${bin}" verbose="false">
 <classpath refid="classpath.base" />
 </javac>
 </target>

 <!-- cria o arquivo war do ear -->
 <target name="criaWar" depends="compile">
 <echo>Gerando arquivo WAR</echo>

 <war warfile="${warfile.name}" webxml="${webxml.file}">

 <fileset dir="${webappdir}" >
 <include name="*.html" />
 <include name="*.jsp" />
 </fileset>

 <classes dir="${bin}">
 <!-- As classes Java desses diretorios -->
 <!-- nao fazem parte do modulo web -->
 <exclude name="session/**" />
 </classes>
	<lib dir="${libs}">
 <exclude name="jboss-ejb3x.jar" />
 </lib>

 <webinf dir="${webinf.dir}">
 <include name="${webxml.file}" />
 </webinf>

 </war>

 </target>

 <!--cria o JAR com os EJBs -->
 <target name="criar JAR EJB" depends="criaWar">
 <echo>Gerando arquivo JAR com EJB </echo>
 <jar jarfile="${session.jar.file}">
 <fileset dir="${bin}">
 <!-- Os beans do JSF nao estao no modulo EJB-->
 <exclude name="managedbean/**" />
 </fileset>
 </jar>
 </target>

 <!-- cria o arquivo EAR -->
 <target name="criar arquivo EAR" depends="criar JAR EJB">
 <echo>Gerando arquivo EAR </echo>
 <jar jarfile="${application.ear.file}">

 <metainf dir="META-INF">
 <include name="application.xml" />
 </metainf>

 <fileset dir="${dist}" includes="*.ejb3, *.jar, *.war, *.par" />
 </jar>

 <!-- se quiser apagar os arquivos gerados -->
 <!--
 <delete file="${warfile.name}"/>
 <delete file="${session.jar.file}"/>
 -->

 </target>

 <!-- faz o deploy no JBoss -->
 <target name="deploy-ear" depends="criar arquivo EAR, undeploy-ear">
 <echo>Deploy aplicacao no JBOSS</echo>
 <copy file="${application.ear.file}" todir="${deploy.home}" />
 </target>

 <!-- undeploy da aplicacao -->
 <target name="undeploy-ear">
 <echo>UnDeploy aplicacao no JBOSS</echo>
 <delete file="${deploy.home}/exemplo.ear"/>
 </target>

</project>
<pre>
About these ads

3 Comentários »

  1. E você saberia me dizer como que eu poderia fazer para criar arquivos EAR para aplicação feita no weblogic? a arquitetura de arquivos dele é diferente, e esse script não seria o “completo” para ele.

    Comentário por Eduardo Zimerer — março 19, 2009 @ 1:30 pm

  2. Olá Eduardo,

    Nunca trabalhei com WebLogic, WLI acho que deve ser um ferramenta que já possui um ambiente completo de desenvolvimento.

    Quando você fala “monta uma arquitetura totalmente diferente”, acredito que seja e estrutura dos arquivos que ele cria dentro dos projetos. Mas o bom de Java é que Java não é uma “linguagem de programação”, é uma especificação. Se o WebLogic é um servidor Java ele deve seguir essa especificação.

    Não importa onde ele coloque seus arquivos .class, por exemplo, se você copia-los para o diretório WEB-INF/classes do arquivo WAR a aplicação vai funcionar.

    Acho que era essa a sua dúvida. Espero ter ajudado.

    Comentário por jadsonjs — março 20, 2009 @ 12:49 am

  3. Ow bixo, valeu, me ajudou muito esse post na parte do EAR

    Comentário por Johanes — dezembro 1, 2011 @ 1:48 pm


Feed RSS para comentários sobre este post. TrackBack URI

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

O tema Silver is the New Black. Blog no WordPress.com.

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

%d blogueiros gostam disto: