SVN, Eclipse y Java

Me pregunto cuál es la solución para configurar SVN y hacer que se implemente en un server externo solo con JSP y files de class. ¿Cómo se deshace de la carpeta src cuando se despliega? ¿Cuál es la configuration adecuada para esto? Solo quiero que varios usuarios puedan enviar trabajos incluidos los files src, pero cuando se implementan en el server de producción, me gustaría que la estructura del file excluya la carpeta src, .project, .classpath, etc. files que no necesito .

Escriba un guión (yo uso ant para tales proyectos java) que promocione / copie a su entorno de producción exactamente lo que quiere.

En mi caso, los guiones de la ant:

  1. Crea un directory tmp,
  2. Copia files específicos de los treees fuente en la nueva estructura de files (a menudo exactamente igual que el origen, simplemente no en las carpetas de origen, y excluyendo .svn y otros files que no me gustaría (files .java en lugar de files .class o flasks, etc.)
  3. Comstack y limpia lo que se necesita
  4. Busca / reemplaza en files de configuration (para permitir el deployment a escenarios, dev, qa o entornos de producción que pueden diferir
  5. Comprime todo y copy (scp) al server de destino si es remoto
  6. Detiene cualquier aplicación en ejecución existente
  7. desempaqueta la nueva versión
  8. Inicia la nueva aplicación

En algunos proyectos, tengo opciones para upload files recién modificados en lugar de volver a desplegar aplicaciones completas, pero esa es una opción de layout que podrá hacer usted mismo. Para los proyectos más grandes en los que he trabajado, me he dedicado a implementar todo el proyecto para cada actualización en lugar de copyr files / cambios individuales en el server. De esta forma puedo garantizar la integridad del process de compilation y el entorno de producción y no tener que preocuparme de que los files aleatorios estén posiblemente fuera de synchronization con el rest del proyecto.

En general, para cualquier cosa que no sea un proyecto trivialmente simple, querrás un entorno real de creación / creación … que tendrás que escribir tú mismo.

Hormiga

Maven

guiones de shell

hacer

todas son soluciones posibles.

 <!-- **************** USAGE (DEFAULT) --> <target name="usage"> <!-- echo detailed usage instructions here --> </target> <!-- ************************************************** --> <!-- ******************* WAS 4.0 WORKER TARGETS --> <target name="init" depends="validenvironment"> <tstamp/> <echo>Build of ${ant.project.name} started at ${TSTAMP} on ${TODAY} </echo> </target> <target name="inittomcat"> <delete dir="tomcatdeploy" /> <mkdir dir="tomcatdeploy" /> </target> <target name="initapache"> <delete dir="apacheconfig" /> <mkdir dir="apacheconfig" /> </target> <!-- validates that you've specified an environment (production, dev, staging etc.) from an allowed list --> <target name="validenvironment"> <condition property="valid.environment"> <or> <equals arg1="${penvironment}" arg2="dev" /> <equals arg1="${penvironment}" arg2="qa" /> <equals arg1="${penvironment}" arg2="staging" /> <equals arg1="${penvironment}" arg2="prod" /> </or> </condition> <fail message="Invalid target ${penvironment}." unless="valid.environment" /> </target> <!-- validates that you've specified a target server to deploy to. Only checks to see if the propery is set, not actual values --> <target name="validserver"> <condition property="valid.server"> <isset property="pserver" /> </condition> <fail message="Invalid server ${pserver}. You must specifiy a server for this target." unless="valid.server" /> </target> <target name="initwar"> <delete dir="tmp/war" /> <mkdir dir="tmp/war" /> <mkdir dir="tmp/war/WEB-INF" /> <mkdir dir="tmp/war/WEB-INF/classes" /> <mkdir dir="tmp/war/WEB-INF/lib" /> <mkdir dir="tmp/war/tags" /> <mkdir dir="tmp/war/images" /> <mkdir dir="tmp/war/javascript" /> <mkdir dir="tmp/war/html" /> <mkdir dir="tmp/war/components" /> </target> <target name="war" depends="initwar" if="penvironment"> <echo>Compiling source files...</echo> <ant antfile="build.xml" dir="classes/" target="compile" inheritAll="false" > <property name="penvironment" value="${penvironment}" /> </ant> <echo>Compile done.</echo> <copy todir="tmp/war/WEB-INF/classes" preservelastmodified="true" > <fileset dir="classes/build" includes="**/*.class" /> </copy> <copy todir="tmp/war/WEB-INF/controller_jsp" preservelastmodified="true" > <fileset dir="controller" includes="**/*.*" /> </copy> <copy todir="tmp/war/WEB-INF" preservelastmodified="true" > <fileset dir="build" includes="**/*.xsl" /> </copy> <copy todir="tmp/war/WEB-INF/lib" preservelastmodified="true" > <fileset dir="build/lib${penv}" includes="**/*.*" /> </copy> <copy todir="tmp/war/html" preservelastmodified="true" > <fileset dir="html" includes="**/*.*" /> </copy> <copy todir="tmp/war/components" preservelastmodified="true" > <fileset dir="components" includes="**/*.*" /> </copy> <copy todir="tmp/war/" preservelastmodified="true" > <fileset dir="root" includes="**/*.*" /> </copy> <copy todir="tmp/war/pages" preservelastmodified="true" > <fileset dir="pages" includes="**/*.*" /> </copy> <copy todir="tmp/war/tags" preservelastmodified="true" > <fileset dir="tags" includes="**/*.*" /> </copy> <copy todir="tmp/war/images" preservelastmodified="true" > <fileset dir="images" includes="**/*.*" /> </copy> <copy todir="tmp/war/javascript" preservelastmodified="true" > <fileset dir="javascript" includes="**/*.*" /> </copy> <!-- copy the web.xml for the target environment into the temp war directory --> <copy tofile="tmp/war/WEB-INF/web.xml" file="xonfig/$penvironment}.web.xml" preservelastmodified="true" > </copy> <!-- now replace all properties in the web.xml file with their values from ${penvironment}.properties --> <echo>Replacing all properties in the web.xml file with their values from ${penvironment}.properties</echo> <replace file="tmp/war/WEB-INF/web.xml" propertyFile="config/${penvironment}.properties"> <replacefilter token="%%HOSTNAME%%" property="webxml.hostname" /> </replace> <copy tofile="tmp/war/WEB-INF/application.properties" file="config/application.properties" preservelastmodified="true" > </copy> <!-- now replace all properties in the application.properties file with their values from ${penvironment}.properties --> <echo>Replacing all properties in the crm.properties file with their values from ${penvironment}.properties</echo> <replace encoding="ISO-8859-1" file="tmp/war/WEB-INF/application.properties" propertyFile="build/${penvironment}.properties"> <replacefilter token="%%HOSTNAME%%" property="hostname" /> <replacefilter token="%%EMAILADDRESS%%" property="emailaddress" /> <replacefilter token="%%LOGFILE%%" property="logfile" /> <replacefilter token="%%LOGLEVEL%%" property="loglevel" /> <replacefilter token="%%DEFAULTPAGE%%" property="defaultpage" /> <replacefilter token="%%MAILSERVER%%" property="mailserver" /> <replacefilter token="%%SUPPORTEDLANGUAGES%%" property="supportedlanguages" /> <replacefilter token="%%LDAPHOST%%" property="ldaphost" /> <replacefilter token="%%LDAPHOSTBACKUP%%" property="ldaphostbackup" /> <replacefilter token="%%LDAPPORT%%" property="ldapport" /> <replacefilter token="%%LDAPVER%%" property="ldapver" /> <replacefilter token="%%LDAPDC%%" property="ldapdc" /> <replacefilter token="%%LDAPPW%%" property="ldappw" /> <replacefilter token="%%LDAPUSERDC%%" property="ldapuserdc" /> <replacefilter token="%%LDAPSEARCH%%" property="ldapsearch" /> <replacefilter token="%%DATASCHEMA%%" property="dataschema" /> </replace> <copy tofile="tmp/war/WEB-INF/navigation.properties" file="config/${penvironment}.maxnavigation.properties" preservelastmodified="true" > </copy> <copy todir="tmp/war/WEB-INF" preservelastmodified="true" > <fileset dir="config/bundle" includes="**/*.*" /> </copy> <!-- Create war file NOT USED right now as we're building this directly into the tomcat directory--> <!--jar jarfile="tmp/${penvironment}.war" basedir="tmp/war" --> </target> <target name="buildtomcat" depends="war,inittomcat,validenvironment" if="penvironment"> <mkdir dir="tmp/tomcatdeploy/${penvironment}" /> <delete> <fileset dir="tomcat/6.x/logs" includes="**/*.log"/> </delete> <copy todir="tmp/tomcatdeploy/${penvironment}/tomcat" preservelastmodified="true" > <fileset dir="tomcat/6.x" includes="**/*.*" /> </copy> <mkdir dir="tmp/tomcatdeploy/${ppenvironment}/tomcat/logs" /> <mkdir dir="tmp/tomcatdeploy/${penvironment}/tomcat/webapps/${tomcat.contextroot}" /> <copy todir="tmp/tomcatdeploy/${penvironment}/tomcat/webapps/${tomcat.contextroot}" preservelastmodified="true" > <fileset dir="tmp/war" includes="**/*.*" /> </copy> <!-- now copy the tomcat config files --> <copy tofile="tmp/tomcatdeploy/${penvironment}/tomcat/conf/context.xml" overwrite="true" file="config/context.xml" preservelastmodified="true" > </copy> <!-- now replace all variables in context.xml --> <replace encoding="ISO-8859-1" file="tmp/tomcatdeploy/${penvironment}/tomcat/conf/context.xml" token="%%JDBCNAME%%" value="${context.jdbcname}" /> <replace encoding="ISO-8859-1" file="tmp/tomcatdeploy/${penvironment}/tomcat/conf/context.xml" token="%%JDBCUSER%%" value="${context.jdbcuser}" /> <replace encoding="ISO-8859-1" file="tmp/tomcatdeploy/${penvironment}/tomcat/conf/context.xml" token="%%JDBCPASSWORD%%" value="${context.jdbcpassword}" /> <replace encoding="ISO-8859-1" file="tmp/tomcatdeploy/${penvironment}/tomcat/conf/context.xml" token="%%JDBCDRIVER%%" value="${context.jdbcdriver}" /> <replace encoding="ISO-8859-1" file="tmp/tomcatdeploy/${penvironment}/tomcat/conf/context.xml" token="%%JDBCURL%%" value="${context.jdbcurl}" /> <!-- now replace all variables / ports in server.xml --> <copy tofile="tmp/tomcatdeploy/${penvironment}/tomcat/conf/server.xml" overwrite="true" file="config/server.xml" preservelastmodified="true" > </copy> <!-- deleted for this example --> <!-- END replace all variables / ports in server.xml --> <!-- Now, replace CONTEXT in catalina.sh and catalina.bat --> <replace encoding="ISO-8859-1" file="tmp/tomcatdeploy/${penvironment}/tomcat/bin/catalina.sh" propertyFile="/config/${penvironment}.properties"> <replacefilter token="%%CONTEXT%%" property="tomcat.contextroot" /> </replace> <replace encoding="ISO-8859-1" file="tmp/tomcatdeploy/${penvironment}/tomcat/bin/catalina.bat" propertyFile="/config/${penvironment}.properties"> <replacefilter token="%%CONTEXT%%" property="tomcat.contextroot" /> </replace> </target> <target name="deployfullapplication" depends="validenvironment,validserver" > <antcall target="deploytomcat" /> <antcall target="deployapacheconfig" /> <antcall target="restartapache" /> </target> <target name="deploytomcat" depends="buildtomcat" > <!-- zip the tomcatdeploy directoyr up --> <zip destfile="tmp/${penvironment}.zip" basedir="tmp/tomcatdeploy" /> <!-- now scp to the server --> <echo>Copying "tmp/${penvironment}.zip" to "${webuser}@${pserver}:/opt/www"</echo> <scp remoteToDir="${webuser}@${pserver}:/opt/www" file="tmp/${penvironment}.zip" verbose="true" failonerror="true" trust="true"> </scp> <!-- now kill existing process on the server --> <antcall target="stoptomcat" /> <!-- now archive the existing deployed application on the server to ${penvironment}.${currenttimestamp} --> <antcall target="archivetomcat" /> <!-- now uncompress the zipped archive into the deployed location /opt/www/${penvironment} --> <antcall target="unzipremotetomcat" /> <!-- now start the application --> <antcall target="starttomcat" /> <!-- cool. thats it. good job. --> <!-- all the remote tasks have been deleted in this example.... just to get the idea of what to do. --> </target> <target name="restarttomcat" depends="validenvironment,validserver" > <antcall target="stoptomcat"/> <antcall target="starttomcat"/> </target> <target name="starttomcat" unless="pnostart" if="pserver" depends="validenvironment,validserver"> <!-- all the remote tasks have been deleted in this example.... just to get the idea of what to do. --> </target> <target name="unzipremotetomcat" if="pserver" depends="validenvironment,validserver"> <!-- all the remote tasks have been deleted in this example.... just to get the idea of what to do. --> </target> <target name="archivetomcat" if="pserver" depends="validenvironment,validserver"> <!-- all the remote tasks have been deleted in this example.... just to get the idea of what to do. --> </target> <target name="stoptomcat" unless="pnokill" if="pserver" depends="validenvironment,validserver"> <!-- all the remote tasks have been deleted in this example.... just to get the idea of what to do. --> </target> <target name="killtomcatprocessonecall" depends="validenvironment,validserver"> <!-- all the remote tasks have been deleted in this example.... just to get the idea of what to do. --> </target> <target name="restartapache" depends="validenvironment,validserver" > <!-- all the remote tasks have been deleted in this example.... just to get the idea of what to do. --> </target> <target name="deployapacheconfig" depends="configapache,validserver"> <!-- all the remote tasks have been deleted in this example.... just to get the idea of what to do. --> </target> <target name="configapache" if="penv" depends="init,validenvironment"> <mkdir dir="tmp/apacheconfig" /> <mkdir dir="tmp/apacheconfig/vhosts.d" /> <mkdir dir="tmp/apacheconfig/ssl.crt" /> <mkdir dir="tmp/apacheconfig/ssl.key" /> <mkdir dir="tmp/apacheconfig/extra" /> <mkdir dir="tmp/apacheconfig/passwords" /> <echo>Copying http base config files...</echo> <copy tofile="tmp/apacheconfig/vhosts.d/${penvironment}.conf" file="config/apache/vhosts/http.conf" preservelastmodified="true" /> <echo>http only replace in http config file...</echo> <replace encoding="ISO-8859-1" file="tmp/apacheconfig/vhosts.d/${penvironment}.conf" propertyFile="config/${penvironment}.properties"> <replacefilter token="%%SERVERADMIN%%" property="httpd.serveradmin" /> <replacefilter token="%%LOGFILE%%" property="httpd.logfile" /> <replacefilter token="%%HOSTNAME%%" property="httpd.hostname" /> <replacefilter token="%%ROOT%%" property="httpd.root" /> <replacefilter token="%%HOSTIP%%" value="*" /> <replacefilter token="%%PORT%%" value="80" /> <replacefilter token="%%PROTOCOL%%" value="http" /> <replacefilter token="%%SSL%%" value="off" /> <replacefilter token="%%SSLCERT%%" value="" /> <replacefilter token="%%SSLKEY%%" value="" /> <replacefilter token="%%SSLCACERT%%" value="" /> <replacefilter token="%%CONTEXTROOT%%" property="tomcat.contextroot" /> <replacefilter token="%%AJPPORT%%" property="port.ajp13" /> <replacefilter token="%%DEFAULTPAGE%%" property="http.defaultpage" /> <replacefilter token="%%ERRORPAGE%%" property="http.errorpage" /> </replace> <condition property="dossl"> <and> <isset property="${penvironment}.ssl.ip" /> </and> </condition> <antcall target="apachessl" /> </target> <target name="apachessl" if="dossl"> <copy tofile="tmp/apacheconfig/vhosts.d/${penvironment}.s.conf" file="apache/vhosts/http.conf" preservelastmodified="true" /> <echo>https only replace in https config file...</echo> <replace encoding="ISO-8859-1" file="tmp/apacheconfig/vhosts.d/${penvironment}.s.conf" propertyFile="config/${penvironment}.properties"> <replacefilter token="%%SERVERADMIN%%" property="httpd.serveradmin" /> <replacefilter token="%%LOGFILE%%" property="httpd.logfile" /> <replacefilter token="%%HOSTNAME%%" property="httpd.hostname" /> <replacefilter token="%%ROOT%%" property="httpd.root" /> <replacefilter token="%%PORT%%" value="443" /> <replacefilter token="%%PROTOCOL%%" value="https" /> <replacefilter token="%%SSL%%" property="httpd.ssl" /> <replacefilter token="%%SSLCERT%%" property="https.sslcert" /> <replacefilter token="%%SSLKEY%%" property="https.sslkey" /> <replacefilter token="%%SSLCACERT%%" property="https.sslcacert" /> <replacefilter token="%%CONTEXTROOT%%" property="tomcat.contextroot" /> <replacefilter token="%%AJPPORT%%" property="port.ajp13" /> <replacefilter token="%%JKWORKER%%" property="tomcat.jkworker" /> <replacefilter token="%%DEFAULTPAGE%%" property="http.defaultpage" /> <replacefilter token="%%ERRORPAGE%%" property="http.errorpage" /> </replace> <copy tofile="tmp/apacheconfig/ssl.crt/${penvironment}.cert" file="config/apache/ssl.crt/${penvironment}.cert" failonerror="false" preservelastmodified="true" /> <copy tofile="tmp/apacheconfig/ssl.crt/verisign.intermediate.cert" file="config/apache/ssl.crt/verisign.intermediate.cert" failonerror="false" preservelastmodified="true" /> <copy tofile="tmp/apacheconfig/ssl.crt/network.solutions.ca.cert" file="config/apache/ssl.crt/network.solutions.ca.cert" failonerror="false" preservelastmodified="true" /> <copy tofile="tmp/apacheconfig/ssl.key/${penvironment}.key" file="config/apache/ssl.key/${penvironment}.key" failonerror="false" preservelastmodified="true" /> </target> 

Una solución fácil sería crear un file de compilation Ant que pueda comstackr el código fuente, los JSP y empaquetar todo en un file .war que luego pueda implementarse en su server de aplicaciones.

Si desea ir con una solución exclusiva de Eclipse, consulte la creación de su proyecto utilizando la plantilla de proyecto "Dynamic Web Project". Esto debería permitir a Eclipse empacar su proyecto como un file .war que luego puede implementar. Creo que Eclipse también te permite configurar un server de aplicaciones que luego puede usar para implementar tu proyecto (personalmente nunca lo he probado).

Si tuviera que elegir, iría con un file de compilation Ant, porque es less trabajo futuro si decides pasar a comstackciones continuas / automáticas.