2017-02-23 3 views
1

Salut im nouveau dans le monde de jenkins/ant/groovy et google n'a pas pu m'aider à résoudre mon problème.Ant script javac commande convertie en un script groovy AntBuilder.javac

Ma tâche est de me débarrasser des scripts ant dans le processus de construction (avec jenkins) et de les inclure dans le travail jenkins (Exécuter le script Groovy du système).

Les sections en gras de mon script sont la raison de l'échec, mais je ne sais pas comment résoudre ce problème.

J'espère que quelqu'un peut m'aider avec ce problème.

Ceci est mon "Exécuter système de script Groovy":

antbuild = new AntBuilder() 
projectHome = '...Homedirectory' 

projectDomainModel = projectHome + '/CSSDomainModel' 
projectPresentationBase = projectHome + '/CSSPresentationBase' 
projectServices = projectHome + '/CSSServices' 
projectResource = projectHome + '/src/main/resources' 

Sources = projectHome + '/Presentation/JavaSource' 
projectLibraries = 'lib/bin' 
projectWebContent = projectHome + '/Presentation/WebContent' 
projectWebInf = projectWebContent + '/WEB-INF' 

deployHome = projectHome + '/target/servicekundenportal' 
deployBuild = deployHome + '/build/classes' 
deployWebInf = deployHome + '/WEB-INF' 

foreignSources = 'src' 

deployWARFile = deployHome + '/serviceportal.war' 

j2eeLibraries = 'D:/Programme_x64/tomcat/8.0.21/Instanz_02/lib' 
compileTarget = '1.8' 

<b>compilerSourceFiles = antbuild.path{ 
     pathelement(path:Sources) 
     pathelement(path:projectDomainModel + '/' + foreignSources) 
     pathelement(path:projectPresentationBase + '/' + foreignSources) 
     pathelement(path:projectServices + '/' + foreignSources) 
     } 

compilerLibraryFiles = antbuild.path{ 
     fileset(dir:projectDomainModel + '/' + projectLibraries) {include name:'**/*.jar'} 
     fileset(dir:projectPresentationBase + '/' + projectLibraries) {include name:'**/*.jar'} 
     fileset(dir:projectServices + '/' + projectLibraries) {include name:'**/*.jar'} 
     fileset(dir:j2eeLibraries) {include name:'**/*.jar'} 
     }</b> 

antbuild.delete(dir:deployHome) 
antbuild.delete(file:deployWARFile) 
antbuild.mkdir(dir:deployBuild) 

build() { 

     antbuild.javac(
      destdir:deployBuild, 
      target:compileTarget, 
      debug:true, 
      fork:true, 
      executable:'D:/Programme_x64/Java/jdk1.8.0_45/bin/javac')<b>{ 
       src(path:compilerSourceFiles) 
       classpath(path:compilerLibraryFiles) 
       }</b> 
     } 

build() 

La partie du script Ant que je ne suis pas en mesure de convertir:

<!-- Compiler Source File Definition --> 
    <path id="compilerSourceFiles"> 
     <pathelement path="${Sources}" /> 
     <pathelement path="${projectDomainModel}/${foreignSources}" /> 
     <pathelement path="${projectPresentationBase}/${foreignSources}" /> 
     <pathelement path="${projectServices}/${foreignSources}" /> 
    </path> 

    <!-- Compiler Library Definition --> 
    <path id="compilerLibraryFiles"> 
     <fileset id="librariesDomainModel" dir="${projectDomainModel}/${projectLibraries}"> 
      <include name="**/*.jar" /> 
     </fileset> 
     <fileset id="librariesPresentationBase" dir="${projectPresentationBase}/${projectLibraries}"> 
      <include name="**/*.jar" /> 
     </fileset> 
     <fileset id="librariesServices" dir="${projectServices}/${projectLibraries}"> 
      <include name="**/*.jar" /> 
     </fileset> 
     <fileset dir="${j2eeLibraries}"> 
      <include name="**/*.jar" /> 
     </fileset> 
    </path> 



    <target name="executeCompiler" depends="preCompile"> 
      <javac destdir="${deployBuild}" target="${compileTarget}" 
       debug="true" debuglevel="lines,vars" encoding="ISO8859-1"> 
       <src refid="compilerSourceFiles" /> 
       <classpath refid="compilerLibraryFiles" /> 
      </javac> 
     </target> 

Répondre

0

Vous par exemple a un peu trop de dépendances sur les structures de répertoires locaux, etc pour reproduire en totalité, mais en utilisant quelque chose comme le ci-dessous comme un modèle devrait vous déplacer dans la bonne direction:

def ant = new AntBuilder() 

def projectHome = '...Homedirectory' 

ant.path(id: 'compilerSourceFiles') { 
    pathelement(path: "$projectHome/Presentation/JavaSource") 
    pathelement(path: "$projectHome/CSSDomainModel/src") 
    pathelement(path: "$projectHome/CSSPresentationBase/src") 
    pathelement(path: "$projectHome/CSSServices/src") 
} 

ant.path(id: "compilerSourceFiles") { 
    fileset(id: "librariesDomainModel", dir: "$projectHome/CSSDomainModel/lib/bin") { 
    include(name: "**/*.jar") 
    } 
    fileset(id: "librariesPresentationBase", dir: "....") { 
    include(name: "**/*.jar") 
    } 
    //... 
} 

ant.target(name: 'executeCompiler', depends: 'preCompile') { 
    javac(destDir: "...", target: "...", debug: true, debugLevel: "lines,vars", encoding: "...") { 
    src(refid: "compilerSourceFiles") 
    classpath(refid: "compilerLibraryFiles") 
    } 
} 

En d'autres termes, chaque fourmi extrait xml:

<outerelement outerattribute="outervalue"> 
    <innerelement innerattribute="innervalue" /> 
</outerelement> 

est converti en:

ant.outerelement(outerattribute: "outervalue") { 
    innerelement(innerattribute: "innervalue") 
} 

lors de l'utilisation AntBuilder.

+0

mon commentaire était trop long, donc je l'ai mis dans une réponse :). Btw, puis-je utiliser le guillemet double "et guillemets simples" – Denyo

+0

Les deux guillemets sont valables dans groovy, single si vous n'avez pas besoin d'expressions $ {} dans vos chaînes, doublez si vous le faites. –