Qual a melhor forma de armazenar Subversion informações sobre a versão no ouvido de?

StackOverflow https://stackoverflow.com/questions/171828

  •  05-07-2019
  •  | 
  •  

Pergunta

Ao receber um relatório de erro ou uma mensagem de uma it-doesnt-obra das minhas iniciais perguntas é sempre que versão? Com um diferente constrói estar em muitas fases de testes, planejar e implantar esta é muitas vezes uma questão não-trivial.

Eu o caso de liberação de JAR (Java ouvido, jar, rar, guerra) arquivos que eu gostaria de ser capaz de olhar em / no JAR e mudar para o mesmo ramo, versão ou tag que foi a fonte do liberado JAR.

Como posso melhor ajustar o processo de criação de formigas para que a informação sobre a versão nos restos SVN Checkout na compilação criado?

Eu estava pensando ao longo das linhas de:

  • adicionando um arquivo de versão, mas com o conteúdo?
  • armazenar informações no arquivo META-INF, mas sob o imóvel com que conteúdo?
  • copiar fontes para o arquivo resultado
  • svn acrescentou: propriedades para todas as fontes com palavras-chave em lugares as folhas do compilador-los ser

Acabei usando a abordagem svnversion (o anwser aceita), porque ele verifica toda a subárvore em oposição a informações svn que só olha para o arquivo / pasta atual. Por isso eu definida a tarefa SVN no arquivo de formiga para torná-lo mais portátil.

<taskdef name="svn" classname="org.tigris.subversion.svnant.SvnTask">
  <classpath>
    <pathelement location="${dir.lib}/ant/svnant.jar"/>
    <pathelement location="${dir.lib}/ant/svnClientAdapter.jar"/>
    <pathelement location="${dir.lib}/ant/svnkit.jar"/>
    <pathelement location="${dir.lib}/ant/svnjavahl.jar"/>
  </classpath>        
</taskdef>

Nem todos constrói resultado em webservices. O arquivo ouvido antes da implantação deve permanecer o mesmo nome por causa da atualização no servidor de aplicativos. Fazendo o arquivo executável ainda é uma opção, mas até então eu só incluir um arquivo de informações de versão.

<target name="version">
  <svn><wcVersion path="${dir.source}"/></svn>
  <echo file="${dir.build}/VERSION">${revision.range}</echo>
</target>

Refs:
svnrevision: http://svnbook.red-bean.com/en/1.1/re57 .html
svn info http://svnbook.red-bean.com/en/1.1/re13 .html
subclipse svn tarefa: http://subclipse.tigris.org/svnant/svn.html
svn cliente: http://svnkit.com/

Foi útil?

Solução

Use o svnversion comando em seu script Ant para obter o número de revisão:

<exec executable="svnversion" outputproperty="svnversion" failonerror="true">
  <env key="path" value="/usr/bin"/>
  <arg value="--no-newline" />
</exec>

Em seguida, use o $ {svnversion} propriedade em algum lugar em seu ouvido. Nós colocá-lo no nome do arquivo EAR, mas você também pode colocá-lo em um arquivo readme ou versão dentro do ouvido, ou especificar a versão na AER META-INF / MANIFEST.MF :

<!-- myapp-r1234.ear -->
<property name="ear" value="myapp-r${svnrevision}.ear" />

Outras dicas

Você gostaria de fornecer o ramo Subversion e número repositório. Como discutido na Como acessar o número Subversion compilação atual? , o comando svn info vai lhe dar esta informação, que você pode usar para construir um arquivo de versão ou lugar em qualquer dos outros arquivos que você está construindo em seus arquivos AR *. Se você não tem nada mais em mente, você poderia pensar em usar a tarefa XmlProperty Ant para extrair as informações relevantes a partir da saída do seu svn info comando --xml

A partir do topo da minha mente. A tag para cada compilação jar?

Temos a primeira parte da nossa construção criar um version.txt arquivo na raiz do pacote e despejar a tag usada para verificar o código a partir de (no nosso caso) CVS ... Além disso, a parte final da nossa cheques processo de construção do EAR costas totalmente embutido no CVS para referência futura.

Dessa forma, se temos um problema com um webapp - é apenas um caso de pedir o repórter para /app/version.txt hit - a partir daí podemos detalhar a história de construção particular na CVS para localizar os componentes relevantes ( alças diferentes versões de bibliotecas em apps) para localizar o erro.

Não tenho certeza quanto ajuda esta é a nossa gente apoio - mas é definitivamente algo que reclamar não estar lá

Do automática constrói, e coloque uma etiqueta (com um carimbo de data) na base de código quando a compilação é bem sucedido (com unittest é claro).

Em seu processo de entrega, somente para entregar marcado constrói para o cliente. Desta forma, você está no controle, e pode colocar o nome da marca em um algum lugar readme.txt, ou ter o nome do arquivo de ouvido refletir a tagname.

Eu, pessoalmente, voltou a CVS, e esta é uma das razões. No CVS, eu posso ter um relatório de classe é tag. Todos os meus arquivos jar conter uma "principal" que os torna executável. Com perguntas de suporte, peço ao cliente para fazer um "java -jar somejar.jar" e enviar a saída para me ao lado da questão.

Desta forma, eu tenho certeza que da compilação que-está usando, e eu posso até ter informações como a versão java, tipo de sistema operacional e versão. Sem que o cliente ter que responder perguntas estranhas.

É simples, mas muito eficaz.

Por que não colocar o número de compilação em um arquivo de propriedades ... isso pode ser facilmente lido pelo java e saída para um Ajuda | Sobre diálogo (applet / aplicativo), rodapé da página web ou qualquer outro GUI que você pode ter.

(Veja o rodapé em cada página SOF .... tem o número de versão SVN lá.)

Parece uma carga mais fácil do que olhar no WAR / EAR / JAR etc fácil tempo?

Eu armazenar a revisão do repositório absoluta como uma parte de meu número de versão completa. Isto dá às pessoas uma rápida olhada para ver se uma determinada mudança é em uma determinada versão ou não.

Nós também armazenar a versão data de número / build / etc no arquivo de manifesto do ouvido como propriedades personalizadas, estes são apenas principalmente informativo. Nós também armazená-lo em um arquivo de propriedades que está embutido no nosso frasco, para que o aplicativo pode lê-lo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top