David Steinsland – informatikkstudent og webutvikler

Innlegg fra kategorien «Apache»

Kompilere Java-prosjekter med Apache Ant

| Ingen kommentarer »

Javaprat

Når en jobber med store Java-prosjekter som inneholder mange klasse- og kildefiler, kan det være et mareritt å holde styr på alle disse. For ikke å snakke om å sørge for å kompilere alle, én etter én. Apache Ant ble laget for akkurat dette formålet, og har mange likhetstrekk med Make (for de som er kjent med Unix). Ant er et automatisert kompileringsverktøy som kan brukes for å kompilere hele Java-prosjekter med én kommando.

Programmet tar utgangspunkt i en konfigurasjonsfil som er formatert i XML, og styrer hvilke filer som kan kompileres og hvor klassefilene skal ligge. Du kan også velge om du skal opprette JAR-filer for hele prosjektet.

Installasjon

Gå til nedlastningssiden for Apache Ant og last ned siste versjon. Pakk ut mappen til for eksempel C:\ant\.

Sørg deretter for at du har en miljøvariabel kalt JAVA_HOME med verdien tilsvarende mappen som inneholder JDK. For eksempel slik:
c:\Progra~1\Java\jdk1.7.0\

Du må også huske å inkludere C:\ant\bin\ i miljøvariabelen PATH.

Forberedelse

Opprett en helt enkelt Java-klasse med en main-metode, som du lagrer i en mappe kalt src.

Deretter oppretter du en XML-fil som du kaller build.xml med følgende innhold:

<?xml version="1.0"?>
<project name="MySQL" default="compile">

	<!-- Configuration -->
	<property name="src.dir"     value="src"/>
    <property name="build.dir"   value="build"/>
    <property name="classes.dir" value="${build.dir}/classes"/>
    <property name="jar.dir"     value="${build.dir}/jar"/>
    <property name="main-class"  value="Test"/>
	<!-- End Configuration -->

	<target name="clean">
        <delete dir="${build.dir}"/>
    </target>

   <target name="compile">
        <mkdir dir="${classes.dir}"/>
        <javac srcdir="${src.dir}" destdir="${classes.dir}"/>
    </target>

	<target name="jar" depends="compile">
        <mkdir dir="${jar.dir}"/>

		<jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}">
            <manifest>
                <attribute name="Main-Class" value="${main-class}"/>
            </manifest>
        </jar>
    </target>

	<target name="run" depends="jar">
		<java jar="${jar.dir}/${ant.project.name}.jar" fork="true"/>
    </target>
</project>

I starten trenger du ikke tenke på mer enn å endre «TestApp» til prosjektets navn, samt endre «main-class» til den klassen som inneholder main-metoden.

De ulike target-blokkene utgjør kommandoene du kan gjøre med Ant. For eksempel vil vi med denne filen ha følgende kommandoer tilgjengelige:

ant compile
ant jar
ant run
ant clean

Dersom du legger merke til linje nummer to, så står det blant annet default=»compile». Dette gjør at dersom vi kjører kommandoen:

ant

Så vil den kjøre compile-oppgaven.

Konfigurasjonsfilen skal lagres i prosjektmappen, slik at du ender opp med følgende mappestruktur;

TestApp
+ src/
|	Test.java
+ build.xml

Gjennomføring

Nå er det lille prosjektet vårt klar til å kompileres.
Start opp kommandolinjen og endre mappe til prosjektet.

For å kompilere prosjektet, skriver du inn kommandoen:

ant

Denne kommandoen gjør oppgaven som er spesifisert under <target name=»compile»>.
Den oppretter mappen build\classes og lagrer klassefilene der.

For å lage en JAR-fil for videre distribusjon, utfører vi kommandoen:

ant jar

Denne er avhengig av at prosjektet først er kompilert, men dette sørger Apache Ant for å gjøre dersom du ikke har gjort det.
Det vil si at vi faktisk ikke trenger å utføre kommandoen ant compile på forhånd.

For å teste at JAR-filen fungerer, kan vi bruke kommandoen ant run.

Oppgraderingsdag

| Ingen kommentarer »

I disse «sene» juledager har jeg fått oppgradert serveren min, deriblant PHP, MySQL og Apache til aller siste versjon. Mest hyggelig er det jo med en etterlengtet MySQL-oppgradering, som såvidt har blitt oppdatert Oracle kjøpte dem opp.

Anbefaler også at du gjør det samme, og da spesielt MySQL 5.5-oppgraderingen hvor InnoDB endelig er satt som standard og som kan skiltes som 540 % mer effektiv (Windows)!

Så nå kjører jeg altså PHP 5.3.4, MySQL 5.5 og Apache 2.2.17, på en Windows 7-maskin, som tok meg i underkant av 15 minutter å gjøre.

PS:

Restarte Apache via PHP (Windows)

| Ingen kommentarer »

PHP tips og triks

Det å jobbe med Apache og PHP på Windows kan ha sine konsekvenser, spesielt det at du ikke har tilgang til et eneste Linux-verktøy. Men det gjelder å tilpasse seg, noe jeg kan bevise i denne artikkelen.

Apache er installert med et program som heter httpd, hvor du for eksempel kan starte/stoppe serveren, sjekke hvilke moduler som er lastet inn og så videre. Jeg har tenkt å benytte meg av dette programmet, men trenger en fremgangsmåte.

Fremgangsmåter

Det er flere måter du kan restarte Apache på, men nå skal jeg prøve å beskrive mine to favoritter:

  1. Opprette en planlagt oppgave med PHP som kjøres én gang, og som restarter Apache
  2. Opprette en planlagt oppgave som kjører hvert minutt, og som sjekker om det finnes en bestemt fil på serveren. Om denne filen finnes, restarter vi Apache.

Med løsningen i første punkt er vi nødt til å kjøre PHP-filen for å restarte Apache, mens i den andre kan opprette denne spesielle filen via for eksempel FTP. Det hele er smak og behag, men jeg bruker løsningen i punkt 2 på min server, og det er denne jeg kommer til å skrive om videre.

Det første vi må gjøre er å opprette oppgaven som skal kjøres. Dette kan du gjøre enten via command prompt (CMD) eller via kontrollpanelet på Windows.

For å opprette oppgaven via CMD, skriver du inn følgende:

SCHTASKS /Create /TN «Apache Restarter» /SC MINUTE /MO 1 /TR C:\restart.vbs

Her oppretter vi en oppgave med navnet Apache Restarter som skal kjøre programmet C:\restart.vbs hvert minutt. Restart.vbs er programmet vårt som sjekker om den aktuelle filen eksisterer og som restarter Apache.

VBS er et nyttig skriptingspråk som brukes på Windows, og kan sammenlignes med Bash på Unix.

Opprett filen restart.vbs og lim inn følgende kode:

Set WshShell = CreateObject("WScript.Shell" )

REM # hiding the command prompt
If Instr(1, WScript.FullName, "CScript", vbTextCompare) = 0 Then
    WshShell.Run "cscript """ & WScript.ScriptFullName & """", 0, False
    WScript.Quit
End If

Set filesys = CreateObject("Scripting.FileSystemObject")
restart_flag = filesys.GetAbsolutePathName("C:\www\flags\restart")

If filesys.FileExists(restart_flag) Then
	filesys.DeleteFile (restart_flag), True
	WshShell.Exec ("httpd -k restart")
End If

Det eneste du trenger å endre her, er filnavnet «C:\www\flags\restart». På min server har jeg plassert denne i en mappe jeg har kalt for «flags». Filnavnet er «restart» uten noen filendelse.

Nå har vi egentlig satt opp rutinen vår:

Den planlagte oppgaven kjører restart.vbs hvert minutt, og det programmet sjekker om flagget «restart» finnes i mappen C:\www\flags\. Det eneste vi trenger å gjøre nå, er å opprette filen «restart» hver gang vi ønsker å restarte Apache: og det kan vi gjøre med PHP.

Opprett en ny fil som du kaller restart.php på serveren din, hvor du limer inn følgende kode:

$h = fopen ('C:\www\flags\restart', 'w+');
fclose ($h);

if (file_exists ('C:\www\flags\restart')) {
    echo 'Apache will restart within one minute.';
}

Hver gang du ønsker å restarte Apache kan du da kjøre den PHP-filen fra nettleseren din, eller opprette flagget «restart» via en FTP.

Jeg ønsker løsningen i punkt 1, hva gjør jeg?

Ideen er den samme, bare du oppretter en oppgave via PHP som skal kjøres én gang med parameteret «httpd -k restart»:

exec ('SCHTASKS /Create /TN "Apache Restart" /SC ONCE /TR "httpd -k restart" /st ' . date ('H:i', strtotime ('+1 minute'));

Her oppretter vi en oppgave som skal kjøres én gang ett minutt i fremtiden.

Last ned

Her følger en ZIP-fil med de kodene du trenger.
Last ned apache_restart.zip

NB: Jeg refererer til programmet httpd.exe som kun httpd. Dette er fordi jeg har lagt bin-mappen til Apache i miljøvariabelen PATH. Om du ikke har gjort dette, må du referere til programmet med full sti, eks: C:\Apache2.2\bin\httpd.exe

Wamp: Sette opp egen hjemmeserver

| 3 kommentarer »

Tidligere har jeg beskrevet hvordan du kan installere ffmpeg på Wamp, samt hvordan du kan opprette underdomener på Wampserver. Nå tenkte jeg å forklare hvordan du kan sette opp en liten hjemmeserver som du få tilgang til gjennom Internett.

Hva er en hjemmeserver?

Kort sagt er det et Webhotell du har på din egen PC. Du styrer alt av underdomener (forklart i egen artikkel), PHP-, Apache- og MySQL-innstillinger med mer. Veldig fleksibel løsning til utvikling, da du kan invitere andre utenfor nettverket ditt til f. eks. å teste systemet.

For å koble deg på hjemmeserveren, stilles det to krav:

  • WampServer må kjøres, og satt i Online-modus
  • Port 80 må være åpen, det vil si at du har viderekoblet denne i ruteren din til PC-ens IP-adresse.

NB: Du vil ikke bli tildelt et domenenavn (som «minside.com») da dette blir styrt av en DNS, som ofte koster penger.

Hva trenger vi?

Normalt bruker Internett port 80 til å sende og motta informasjon, men noen ISP-er har denne porten blokkert slik du ikke kan sette opp en hjemmeserver. Slapp av — det er mulig å jobbe seg rundt.

Om det skulle vise seg at porten er blokkert, må du konfigurere Apache til å følge med på (eng. «listen») en annen port. Velg gjerne 8080.

Videre i denne guiden tar jeg som utgangspunkt at du kan bruke port 80 uten problem (dette gjelder de aller, aller fleste).

Let’s get to it!

I mitt internnettverk har PC-en min (som serveren er installert på) en fast IP-adresse, 192.168.0.197. Ruteren min er en Linksys WRT54GL (som jeg for øvrig anbefaler på det sterkeste). Jeg tar ikke opp emnet om å videreføre porter i denne guide, da alle har hver sin ruter og oppsettet varierer derfor. Men ved å følge Port Forward sin enkle guide, blir det en lek å åpne porten. Sørg bare for at PC-en din er stilt inn med en statisk IP!

Når du har sørget for at porten din er åpen, vel — da er du i bunn og grunn ferdig. Om du er i tvil om du har åpnet porten skikkelig, så kan du ta deg en tur innom CanYouSeeMe og skriver inn 80 som portnummer. Du er nødt til å ha Wamp kjørende for at den skal klare å sjekke det. Om du får opp en feilmelding, er det fordi:

  • Du har gjort en feil da du åpnet porten din. Har du skrevet inn riktig IP-adresse, og haket av for «Enable» ?
  • ISP-en (Internett-tilbyderen) din blokkerer port 80, og du må derfor velge en annen port

Jeg vil råde deg til å passordbeskytte både phpMyAdmin og index.php i www-mappen. På denne måten har du kontroll over at ingen uvedkommende skal ødelegge prosjektene dine.

For å sjekke om du virkelig kan koble deg til serveren din, går du innom WhatIsMyIP og finner ut hvilken IP-adresse du har på Internett. Kopier denne inn i adressefeltet i nettleseren din, og se resultatet!

IP-en peker egentlig til ruteren din (det ytterste elementet i nettverket ditt), men ruteren vil registrere at du kommer fra Internett (port 80), og retter denne forespørselen videre til en PC på lokalnettet. Dette gjelder selvsagt kun dersom du har konfigurert ruteren din slik jeg har beskrevet.

Jeg kan skissere prosessen slik:

Om du føler det blir vanskelig å huske IP-adressen din hver gang du skal innom serveren din, kan du alltids registrere deg hos en gratis DNS-tilbyder.

Håper du fikk nytte av denne guiden! Kom gjerne med tilbakemeldinger i kommentarfeltet.

Wamp: Opprette underdomener

| 3 kommentarer »

Veldig konsis guide på hvordan du kan opprette underdomener lokalt på datamaskinen din, om du bruker Wampserver. Orker du ikke en haug med tekst? Sjekk ut videoen i bunnen!

1. Gå til mappen: C:\Windows\System32\Drivers\etc\

Der ligger det en fil som heter «hosts». Ja, det er riktig: den har ingen filendelse. Høgreklikk på filen, velg «åpne med …» og velg en tekstredigerer (type Notepad).

Under linjen

127.0.0.1     localhost

legger du til:

127.0.0.1     underdomene.localhost

«Underdomene» kan du endre til hva du vil: dette blir da navnet på underdomenet ditt.

PS: Dersom det er et nummertegn (#) foran «127.0.0.1     localhost», så er du nødt til å fjerne dette tegnet.

 

2. Klikk på Wamp-ikonet i tray, velg Apache og trykk på «httpd.conf«

Bla ned (nesten til bunns) i filen, til du kommer til følgende linje:

# Virtual hosts
#Include conf/extra/httpd-vhosts.conf

Fjern nummertegnet fra siste linje.

3. Gå til C:\wamp\bin\apache\Apache2.2.11\conf\extra\

Her åpner du filen «httpd-vhosts.conf«. Dette er konfigurasjonsfilen som styrer de virtuelle serverinnstillingene i Apache.

Fjern de to <VirtualHost *:80>-blokkene, og legg til følgende kode:

<VirtualHost *:80>
 DocumentRoot C:/wamp/www/
 ServerName localhost
</VirtualHost>

<VirtualHost *:80>
DocumentRoot C:/wamp/www/underdomene/
ServerName underdomene.localhost
</VirtualHost>

Dette forteller Apache at alle  forespørsler skal sendes til www-mappen, såfremt det ikke eksisterer et underdomene. I praksis betyr det at http://underdomene.localhost/ vil vise deg samme innhold som http://localhost/underdomene/.

4. Restart Wampserver — You are Good to Go!

Husk selvsagt å endre «underdomene» til hva du ønsker (gjelder alle kodene).

 

Som vanlig følger det også med en video som viser fremgangsmåte.