Apache ANT opetusohjelma

โšก ร„lykรคs yhteenveto

Apache Ant on avoimen lรคhdekoodin, Java-pohjainen kรครคnnรถstyรถkalu, joka automatisoi kรครคntรคmisen, testauksen, pakkaamisen ja kรคyttรถรถnoton yhden build.xml-tiedoston avulla. Integroitu Selenium ja TestNG, se tekee testien suorituksesta toistettavaa, jรคrjestelmรคllistรค ja helppoa missรค tahansa.

  • ๐Ÿœ Ydinrooli: Ant tallentaa ja suorittaa koontivaiheet perรคkkรคin XML-mรครคritystiedostosta.
  • โš™๏ธ Rakennuksen elinkaari: Yksi tiedosto kรคsittelee siivouksen, kรครคntรคmisen, luokkapolun asettamisen, suorituksen ja raportoinnin.
  • ๐Ÿ“ฆ build.xml-tiedoston rakenne: Projekti-, kohde-, tehtรคvรค- ja ominaisuustunnisteet mรครคrittelevรคt jokaisen rakennusvaiheen.
  • ๐Ÿ”ง Asennus: Aseta ANT_HOME-muuttuja ja lisรครค %ANT_HOME%\bin jรคrjestelmรคn polkuun.
  • ๐Ÿงช Selenium ja TestNG: Ant kutsuu testng.xml-tiedostoa, jotta paketit toimivat koonnin aikana.
  • ๐Ÿš€ Riippuvuuksien hallinta: Kolmannen osapuolen JAR-polut on keskitetty, mikรค parantaa luotettavuutta ja kรคyttรถรถnottoa.

Apache-muurahainen Selenium

Mikรค on Apache Ant?

Tรคydellistรค ohjelmistotuotetta luotaessa on huolehdittava erilaisista kolmannen osapuolen API:ista, niiden luokkapolusta, aiempien suoritettavien binรครคritiedostojen puhdistamisesta, lรคhdekoodimme kรครคntรคmisestรค, lรคhdekoodin suorittamisesta, raporttien ja kรคyttรถรถnottokoodikannan luomisesta jne. Jos nรคmรค tehtรคvรคt ovat tehdรค yksitellen manuaalisesti, se vie valtavasti aikaa ja prosessi on altis virheille.

Tรคssรค tulee esiin Anten kaltaisen rakennustyรถkalun merkitys. Se tallentaa, suorittaa ja automatisoi kaikki prosessit Ant:n asetustiedostossa (yleensรค build.xml) mainitussa jรคrjestyksessรค.

Apache Ant

Ant-rakennuksen etu

  1. Ant luo sovelluksen elinkaaren eli puhdistaa, kรครคntรครค, asettaa riippuvuuden, suorittaa, raportoi jne.
  2. Kolmannen osapuolen API-riippuvuuden voi asettaa Ant eli muun Jar-tiedoston luokkapolun mรครคrittรครค Ant-koontitiedosto.
  3. Tรคydellinen sovellus luodaan pรครคstรค pรครคhรคn -toimitusta ja kรคyttรถรถnottoa varten.
  4. Se on yksinkertainen rakennustyรถkalu, jossa kaikki asetukset voidaan tehdรค XML-tiedostolla ja joka voidaan suorittaa komentoriviltรค.
  5. Se tekee koodistasi puhtaan, koska kokoonpano on erillinen todellisesta sovelluslogiikasta.

Kuinka asentaa Ant

Antin asentamisen vaiheet Windows on seuraava

Vaihe 1) Mene https://ant.apache.org/bindownload.cgi Tai Lataa .zip-tiedosto osoitteesta apache-ant-1.9.4-bin.zip

Asenna Ant

Vaihe 2) Pura kansio ja siirry ja kopioi polku puretun kansion juureen

Asenna Ant

Vaihe 3) Siirry kohtaan Kรคynnistรค -> Tietokone -> napsauta hiiren kakkospainikkeella tรคtรค ja valitse "Ominaisuudet" ja napsauta sitten Jรคrjestelmรคn lisรคasetukset

Asenna Ant

Vaihe 4) Uusi ikkuna avautuu. Napsauta "Ympรคristรถmuuttujaโ€ฆ" -painiketta.

Asenna Ant

Vaihe 5) Napsauta Newโ€ฆ-painiketta ja aseta muuttujan nimeksi ANT_HOME ja muuttujan arvo puretun kansion juuripoluksi ja napsauta OK.

Asenna Ant

Vaihe 6) valitse nyt luettelosta 'Path'-muuttuja ja napsauta 'Muokkaa' ja liitรค; %ANT_HOME%\bin.

Asenna Ant

Kรคynnistรค jรคrjestelmรค uudelleen kerran ja olet valmis kรคyttรคmรครคn Ant build -tyรถkalua nyt.

Vaihe 7) Ant-version tarkistaminen komentorivin avulla:

Ant โ€“ versio

Asenna Ant

Build.xml:n ymmรคrtรคminen

Build.xml on Ant-rakennustyรถkalun tรคrkein osa. a Java projekti, kaikki puhdistukseen, asennukseen, kรครคnnรถkseen ja kรคyttรถรถnottoon liittyvรคt tehtรคvรคt mainitaan tรคssรค tiedostossa XML-muodossa. Kun suoritamme tรคmรคn XML-tiedoston komentorivillรค tai millรค tahansa IDE-laajennuksella, kaikki tรคhรคn tiedostoon kirjoitetut ohjeet suoritetaan perรคkkรคin.

Ymmรคrretรครคn esimerkki build.XML:n koodista

  • Projektitunnistetta kรคytetรครคn mainitsemaan projektin nimi ja baseir-attribuutti. Basedir on sovelluksen juurihakemisto
    <project name="YTMonetize" basedir=".">
  • Ominaisuustunnisteita kรคytetรครคn muuttujina build.XML-tiedostossa, jota kรคytetรครคn jatkossa
<property name="build.dir" value="${basedir}/build"/>
		<property name="external.jars" value=".\resources"/>
	<property name="ytoperation.dir" value="${external.jars}/YTOperation"/>
<property name="src.dir"value="${basedir}/src"/>
  • Target tagit, joita kรคytetรครคn vaiheina, jotka suoritetaan perรคkkรคisessรค jรคrjestyksessรค. Name-attribuutti on kohteen nimi. Yhdessรค build.xml-tiedostossa voi olla useita kohteita
    <target name="setClassPath">
  • polkutunnistetta kรคytetรครคn niputtamaan kaikki tiedostot loogisesti, jotka ovat yhteisessรค paikassa
    <path id="classpath_jars">
  • pathelement-tunniste asettaa polun yhteisen sijainnin juureen, johon kaikki tiedostot on tallennettu
    <pathelement path="${basedir}/"/>
  • pathconvert-tunnistetta kรคytetรครคn muuntamaan kaikkien polkutunnisteen sisรคllรค olevien yleisten tiedostojen polut jรคrjestelmรคn luokkapolkumuotoon
    <pathconvert pathsep=";" property="test.classpath" refid="classpath_jars"/>
  • fileset-tagi, jota kรคytetรครคn luokkapolun asettamiseen eri kolmannen osapuolen jarille projektissamme
    <fileset dir="${ytoperation.dir}" includes="*.jar"/>
  • Kaikutunnistetta kรคytetรครคn tekstin tulostamiseen konsoliin
<echo message="deleting existing build directory"/>
  • Poista tagi puhdistaa tiedot annetusta kansiosta
<delete dir="${build.dir}"/>
  • mkdir-tunniste luo uuden hakemiston
	<mkdir dir="${build.dir}"/>
  • javac-tunniste, jota kรคytetรครคn Java-lรคhdekoodin kรครคntรคmiseen ja .class-tiedostojen siirtรคmiseen uuteen kansioon
        <javac destdir="${build.dir}" srcdir="${src.dir}">
	<classpath refid="classpath_jars"/>
</javac>
  • jar-tunniste luo jar-tiedoston .class-tiedostoista
	<jar destfile="${ytoperation.dir}/YTOperation.jar" basedir="${build.dir}">
  • manifest-tunniste asettaa pรครคluokkasi suoritusta varten
<manifest>
		<attribute name="Main-Class" value="test.Main"/>
</manifest>
  • 'depends'-attribuutti, jota kรคytetรครคn saamaan yksi kohde riippuvaiseksi toisesta kohteesta
<target name="run" depends="compile">
  • java-tunniste suorittaa pรครคtoiminnon kรครคnnรถskohdeosiossa luodusta jarista
<java jar="${ytoperation.dir}/YTOperation.jar" fork="true"/>

Suorita Ant kรคyttรคmรคllรค Eclipse kytkeรค

Suorita Ant from eclipse siirtymรคllรค build.xml-tiedostoon -> napsauta tiedostoa hiiren kakkospainikkeella -> Suorita nimellรคโ€ฆ -> napsauta Build file

Suorita Ant kรคyttรคmรคllรค Eclipse Kytkeรค

esimerkki

Otamme pienen nรคyteohjelman, joka selittรครค Ant-toiminnallisuuden erittรคin selkeรคsti. Projektirakenteemme nรคyttรครค tรคltรค -

Suorita Ant kรคyttรคmรคllรค Eclipse Kytkeรค

Tรคssรค esimerkissรค meillรค on 4 kohdetta

  1. Aseta luokkapolku ulkoisille purkeille,
  2. Puhdista aiemmin noudatettu koodi
  3. Kรครคntรครค olemassa olevaa Java-koodia
  4. Suorita koodi

Guru99AntClass.class

package testAnt;		
import java.util.Date;		

public class Guru99AntClass {				
   public static void main(String...s){									       
		System.out.println("HELLO GURU99 ANT PROGRAM");					        
		System.out.println("TODAY's DATE IS->"+ currentDate() );					  
}		    		   
public static String currentDate(){					        
	return new Date().toString();					  
	}		
}

Build.xml

 
<?xml version="1.0" encoding="UTF-8"	standalone="no"?>									
<!--Project tag used to mention the project name, and basedir attribute will be the root directory of the application-->	

<project name="YTMonetize" basedir=".">								
     <!--Property tags will be used as variables in build.xml file to use in further steps-->		

	<property name="build.dir" value="${basedir}/build"/>								
    <property name="external.jars" value=".\resources"/>								
		<property name="ytoperation.dir" value="${external.jars}/YTOperation"/>
<property name="src.dir"value="${basedir}/src"/>
<!--Target tags used as steps that will execute in sequential order. name attribute will be the name  of the target and < a name=OLE_LINK1 >'depends' attribute used to make one target to depend on another target -->		
	       <target name="setClassPath">					
			<path id="classpath_jars">						
				<pathelement	path="${basedir}/"/>					
			</path>				         
<pathconvert	pathsep=";"property="test.classpath" refid="classpath_jars"/>	
</target>				
	<target name="clean">						
		<!--echo tag will use to print text on console-->		
		<echo message="deleting existing build directory"/>						
		<!--delete tag will clean data from given folder-->		
		<delete dir="${build.dir}"/>						
	</target>				
<target name="compile" depends="clean,setClassPath">								
	<echo message="classpath:${test.classpath}"/>					
			<echo message="compiling.........."/>						
	<!--mkdir tag will create new director-->							
	<mkdir dir="${build.dir}"/>						
		<echo message="classpath:${test.classpath}"/>						
		<echo message="compiling.........."/>						
	<!--javac tag used to compile java source code and move .class files to a new folder-->		
	<javac destdir="${build.dir}" srcdir="${src.dir}">								
			<classpath refid="classpath_jars"/>						
	</javac>				
	<!--jar tag will create jar file from .class files-->		
	<jar	destfile="${ytoperation.dir}/YTOperation.jar"basedir="${build.dir}">								
	            <!--manifest tag will set your main class for execution-->		
						<manifest>				
							<attribute name="Main-Class" value="testAnt.Guru99AntClass"/>  
</manifest>		
</jar>				
    </target>				
	<target name="run" depends="compile">								
		<!--java tag will execute main function from the jar created in compile target section-->	
<java jar="${ytoperation.dir}/YTOperation.jar"fork="true"/>			
</target>				
	</project>				

Suorita Ant kรคyttรคmรคllรค Eclipse kytkeรค

Kuinka Suorittaa TestNG koodi Ant

Suorittaa TestNG koodi Ant

Tรครคllรค luomme luokan Testng menetelmรคt ja aseta luokkapolku Testaus tiedostossa build.xml.

Nyt testausmenetelmรคn suorittamiseksi luomme toisen testng.xml-tiedoston ja kutsumme tรคtรค tiedostoa build.xml-tiedostosta.

Vaihe 1) Luomme "Guru99Muurahaisluokka.luokkaโ€ paketissa testAnt

Guru99AntClass.class

package testAnt;
import java.util.Date;
import org.testng.annotations.Test;		
public class Guru99AntClass {				
    @Test		  
	public void Guru99AntTestNGMethod(){					     
		System.out.println("HELLO GURU99 ANT PROGRAM");					
		System.out.println("TODAY's DATE IS->"+ currentDate() );					
	}		
	public static String currentDate(){					
		return new Date().toString();					
	}		
}		

Vaihe 2) Luo kohde tรคmรคn luokan lataamiseksi Build.xml:ssรค

<!-- Load testNG and add to the class path of application -->
	<target name="loadTestNG" depends="setClassPath">
<!โ€”using taskdef  tag we can add a task to run on the current project. In below line, we are adding testing task in this project. Using testing task here now we can run testing code using the ant script -->
		<taskdef resource="testngtasks" classpath="${test.classpath}"/>
</target>

Vaihe 3) Luo testng.xml

testng.xml

<?xml version="1.0"encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="YT"thread-count="1">
			<test name="GURU99TestNGAnt">
			<classes>
			   <class name="testAnt.Guru99AntClass">
	</class>
</classes>
</test>
</suite>

Vaihe 4) luoda Target Build.xml:ssรค suorittaaksesi tรคmรคn TestNG koodi

<target name="runGuru99TestNGAnt" depends="compile">
<!-- testng tag will be used to execute testng code using corresponding testng.xml file. Here classpath attribute is setting classpath for testng's jar to the project-->
	<testng classpath="${test.classpath};${build.dir}">
<!โ€”xmlfileset tag is used here to run testng's code using testing.xml file. Using includes tag we are mentioning path to testing.xml file-->
	 <xmlfileset dir="${basedir}" includes="testng.xml"/>
</testng>				

Vaihe 5) Tรคydellinen Build.xml

<?xml version="1.0"encoding="UTF-8"standalone="no"?>
<!--Project tag used to mention the project name, and basedir attribute will be the root directory of the application-->
			<project name="YTMonetize" basedir=".">
		       <!--Property tags will be used as variables in build.xml file to use in further steps-->
			<property name="build.dir"value="${basedir}/build"/>
<!-- put  testng related jar in the resource  folder -->
	      <property name="external.jars" value=".\resource"/>
				<property name="src.dir" value="${basedir}/src"/>
<!--Target tags used as steps that will execute in  sequential order. name attribute will be the name
    of the target and 'depends' attribute used to make one target to depend on another target-->
<!-- Load testNG and add to the class path of application -->
         <target name="loadTestNG"depends="setClassPath">
				<taskdef resource="testngtasks"classpath="${test.classpath}"/>
		</target>
		<target name="setClassPath">
		       <path id="classpath_jars">
					<pathelement path="${basedir}/"/>
					<fileset dir="${external.jars}" includes="*.jar"/>
         </path>
        <pathconvert pathsep=";"property="test.classpath"refid="classpath_jars"/>
	</target>
	<target name="clean">
              <!--echo tag will use to print text on console-->
	               <echo message="deleting existing build directory"/>
               <!--delete tag will clean data from given folder-->
	               <delete				dir="${build.dir}"/>
			</target>
<target name="compile"depends="clean,setClassPath,loadTestNG">
	         <echo message="classpath:${test.classpath}"/>
	               <echo	message="compiling.........."/>
		       <!--mkdir tag will create new director-->
		        <mkdir dir="${build.dir}"/>
					<echo message="classpath:${test.classpath}"/>
			<echo message="compiling.........."/>
	<!--javac tag used to compile java source code and move .class files to a new folder-->
	        <javac destdir="${build.dir}"srcdir="${src.dir}">
	             <classpath refid="classpath_jars"/>
		</javac>
  </target>
<target name="runGuru99TestNGAnt"depends="compile">
		<!-- testng tag will be used to execute testng code using corresponding testng.xml file -->
			<testng classpath="${test.classpath};${build.dir}">
               <xmlfileset dir="${basedir}"includes="testng.xml"/>
	</testng>
</target>
</project>

Vaihe 6) ulostulo

Suorittaa TestNG koodi Ant

Lataa yllรค oleva tiedosto

Antin hallinnoidessa rakennusta ja TestNG kytkettynรค, seuraava vaihe kytkee Antin suoraan Selenium WebDriver.

Muurahainen kanssa Selenium Web-ohjain

Tรคhรคn mennessรค olemme oppineet, ettรค Antin avulla voimme sijoittaa kaikki kolmannen osapuolen jar-tiedostot tiettyyn paikkaan jรคrjestelmรคssรค ja mรครคrittรครค niiden polun projektillemme. Tรคllรค menetelmรคllรค asetamme kaikki projektimme riippuvuudet yhteen paikkaan ja teemme siitรค luotettavamman kรครคntรคmisen, suorittamisen ja kรคyttรถรถnoton kannalta.

Vastaavasti seleeniรค kรคyttรคvissรค testausprojekteissamme voimme helposti mainita seleeniriippuvuuden build.xml:ssรค, eikรค meidรคn tarvitse lisรคtรค sen luokkapolkua manuaalisesti sovellukseemme.

Joten nyt voit jรคttรครค huomioimatta alla mainitun perinteisen tavan asettaa luokkapolut projektille.

Muurahainen kanssa Selenium Web-ohjain

Esimerkiksi:

Aiomme muokata edellistรค esimerkkiรค

Vaihe 1) Aseta ominaisuus seleen.jars arvoksi seleeniin liittyvรค jar resurssikansiossa

		<property name="selenium.jars" value=".\selenium"/>

Vaihe 2) Lisรครค seleenitiedostot kohde-setClassPathiin

<target name="setClassPath">
	        <path id="classpath_jars">
				<pathelement path="${basedir}/"/>	
				<fileset dir="${external.jars}" includes="*.jar"/>
	            <!-- selenium jar added here -->
  		            <fileset dir="${selenium.jars}" includes="*.jar"/>
         </path>		

Vaihe 3) Tรคydellinen Build.xml:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<!--Project tag used to mention the project name, and basedir attribute will be the root directory of the application-->
			<project name="YTMonetize" basedir=".">
                  <!--Property tags will be used as variables in build.xml file to use in further steps-->
				<property name="build.dir" value="${basedir}/build"/>
      <!-- put  testng related jar in the resource  folder -->
	       <property name="external.jars" value=".\resource"/>
<!-- put  selenium related jar in resource  folder -->
     <property name="selenium.jars" value=".\selenium"/>
			<property name="src.dir" value="${basedir}/src"/>
				<!--Target tags used as steps that will execute in  sequential order. name attribute will be the name 
of the target and 'depends' attribute used to make one target to depend on another target-->
      <!-- Load testNG and add to the class path of application -->
       <target name="loadTestNG" depends="setClassPath">
				<taskdef resource="testngtasks" classpath="${test.classpath}"/>
		</target>
<target name="setClassPath">
	        <path id="classpath_jars">
				<pathelement path="${basedir}/"/>
					<fileset dir="${external.jars}" includes="*.jar"/>
			<!-- selenium jar added here -->
	            <fileset dir="${selenium.jars}"includes="*.jar"/>
        </path>
   <pathconvert pathsep=";" property="test.classpath" refid="classpath_jars"/>
</target>
<target name="clean">
<!--echo tag will use to print text on console-->
               <echo message="deleting existing build directory"/>
	                <!--delete tag will clean data from given folder-->
		               <delete dir="${build.dir}"/>
				</target>
<target name="compile" depends="clean,setClassPath,loadTestNG">
         <echo message="classpath:${test.classpath}"/>
                <echo message="compiling.........."/>
        <!--mkdir tag will create new director-->
	        <mkdir dir="${build.dir}"/>
          			<echo message="classpath:${test.classpath}"/>
			<echo message="compiling.........."/>
	<!--javac tag used to compile java source code and move .class files to new folder-->
     <javac destdir="${build.dir}"srcdir="${src.dir}">
             <classpath refid="classpath_jars"/>
	</javac>
</target>
<target name="runGuru99TestNGAnt" depends="compile">
		<!-- testng tag will be used to execute testng code using corresponding testng.xml file -->
			<testng classpath="${test.classpath};${build.dir}">
               <xmlfileset dir="${basedir}" includes="testng.xml"/>
		</testng>
	</target>
</project>

Vaihe 4) Muuta nyt aiemmin luotua luokkaa Guru99AntClass.java uudella koodilla.

Tรคssรค tรคssรค esimerkissรค vaiheemme kรคyttรคmรคllรค Selenium ovat:

  1. Mene https://demo.guru99.com/test/guru99home/
  2. Lue kaikki kurssilinkit yksitellen
  3. Tulosta kaikkien kurssien hyperlinkki konsolissa.

Guru99AntClass.java:

package testAnt;		
import java.util.List;		
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;	
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.Test;

public class Guru99AntClass {

	@Test		
		public void Guru99AntTestNGMethod(){
	      WebDriver driver = new FirefoxDriver();	
		  driver.get("https://demo.guru99.com/test/guru99home/");
		  List<WebElement> listAllCourseLinks = driver.findElements(By.xpath("//div[@class='canvas-middle']//a"));							        
          for(WebElement webElement : listAllCourseLinks) {
			System.out.println(webElement.getAttribute("href"));
      	  }
		}
}		

Vaihe 5) Onnistuneen suorituksen jรคlkeen tulos nรคyttรครค tรคltรค:

Muurahainen kanssa Selenium Web-ohjain

Lataa yllรค oleva esimerkkitiedosto

UKK

Ant on proseduraaliseen rakentamiseen perustuva tyรถkalu, jossa jokainen vaihe skriptataan manuaalisesti, kun taas Maven on deklaratiivinen ja hallitsee riippuvuuksia automaattisesti keskitetyn tietovaraston kautta. Ant antaa enemmรคn hallintaa; Maven tuo kรคytรคnnรถn kรคytรคntรถjรค.

Kyllรค. Monet perinnรถt Java ja Selenium projektit luottavat edelleen Antiin koontiversioissa ja jatkuvassa integroinnissa. Uudemmat projektit valitsevat usein Mavenin tai Gradle, mutta Ant on edelleen hyรถdyllinen hienojakoisessa koonnin hallinnassa.

Apache Ant 1.10.x on aktiivisesti yllรคpidetty sarja ja vaatii Java 8 tai uudempi. Vanhempi 1.9.x-versio tukee perinteistรค versiota JavaLataa binรครคritiedostot aina viralliselta ant.apache.org-sivustolta.

Kyllรค. Tekoรคlyavustajat, kuten ChatGPT tai Copilot scaffold build.xml -kohteet, ehdottavat tehtรคvรคmรครคritelmiรค ja selittรคvรคt virheitรค. RevTarkastele luotua XML-tiedostoa huolellisesti, koska polut ja riippuvuusversiot vaativat vielรค varmennusta.

Tekoรคlyllรค toimivat tyรถkalut tuottavat TestNG ohjelmistopaketteja, optimoivat testien jรคrjestystรค ja merkitsevรคt Ant-kohteiden kรคynnistรคmiรค epรคtasaisia โ€‹โ€‹testejรค. Ne vรคhentรคvรคt yllรคpitotarvetta ehdottamalla paikannuskorjauksia ja analysoimalla koontiraportteja automaattisesti.

Ei. Ant voi kรครคntyรค ja ajaa suoraan Java or JUnit testit myรถs. TestNG lisรครค yksinkertaisesti joustavan ohjelmistopaketin kokoonpanon testng.xml-tiedoston kautta, jonka Ant kรคynnistรครค testng-tehtรคvรคn avulla koontiversion aikana.

ANT_HOME kertoo kรคyttรถjรคrjestelmรคlle, mihin Ant on asennettu, joten ant-komento suoritetaan mistรค tahansa hakemistosta. Lisรครคt %ANT_HOME%\bin jรคrjestelmรคn polkuun asennuksen aikana Windows.

Gradle on yleensรค parempi uusille projekteille, koska se yhdistรครค Antin joustavuuden Maven-riippuvuuksien hallintaan ja nopeampiin inkrementaalisiin koonteihin. Valitse Ant pรครคasiassa olemassa olevien koontiskriptien yllรคpitoon.

Tiivistรค tรคmรค viesti seuraavasti: