Wednesday, January 30, 2008

Example ivy settings.xml for artifactory repository

Below you can find settings.xml for your project.It defines dependencies for ivy.


And artifactory directory structure is like that:



Point that dependency is written like
javax/faces
NOT
javax.faces

in settings.xml

http://myserverip:port/artifactory/repo/javax/faces/jsf-api/1.1_02/jsf-api-1.1_02.jar

in ivysettings.xml

[organisation] = javax/faces
[module] = jsf-api
[revision] = 1.1_02
[artifact]-[revision].[ext] = jsf-api-1.1_02.jar

in settings.xml

[org] = javax/faces
[name] = jsf-api
[rev] = 1.1_02

Previously i wrote that artifactory can't download artifacts when I build project with ant-ivy.I realized that I should write dependencies like javax/faces NOT javax.faces.

Example ivy ivysettings.xml for artifactory repository

You can find below how you need to define your ivysettings.xml for your artifactory repository.

Tuesday, January 29, 2008

How to create project directory structure with maven archetype plugin

Nowadays i am working on a new dynamic web project which uses spring-hibernate-richfaces trio.My first task to set up development environment of project.It involves many steps.I will write sth about it occasionally.

Here I will use Maven Archetype plugin to create directory structure of my project.Assume that dynamic webproject has 3 directory initially.

core
web
security

Because we will created an internal artifactory repository and configured it we dont care about jars anymore.Project will be simply involves java classes,resources like gifs,jpegs for web side,and our pom.xmls.Jars will reside in M2_REPO which is = Your home\.m2\repository as default.

1.Create an empty directory e.g myproject
2.Go inside it
3.write in command prompt

mvn archetype:create -DgroupId=com.mycompany.myproject.core
-DartifactId=myproject-core -DarchetypeArtifactId=maven-archetype-quickstart

It will create myproject-core directory.

4.write in command prompt

mvn archetype:create -DgroupId=com.mycompany.myproject.web
-DartifactId=myproject-web -DarchetypeArtifactId=maven-archetype-webapp

It will create myproject-web directory.

5..write in command prompt

mvn archetype:create-DgroupId=com.mycompany.myproject.security
-DartifactId=myproject-security-DarchetypeArtifactId=maven-archetype-quickstart

It will create myproject-security directory.

You will see that every directory has a pattern.Thanks to this plugin you dont need to think about directory structure of your project.

For more information
http://maven.apache.org/plugins/maven-archetype-plugin/

Monday, January 28, 2008

Ant -Maven War:Ivy on the battlefield

Ivy is the new graduated dependency manager from Apache Ant project which is counterattack to Apache Maven project .
Which option is good for you?
Using ant as a build tool and then configure it via ivy maven-like behavior?Or
Using maven as a build tool and then use maven-ant tasks to get ant-like behavior?
You can find comparision of this tools in their website from 2 different perspectives.
It s up to you choose one of them.But in our internal repository server example I didnt correctly configure ivy to get jars from repository. Ivy can download jars from my repository if they are there.But if there are no jars to download artifactory can't get jars from internet which is default behaviour when I use maven.Maybe i can find answer or maybe I must use maven and ant tasks simply.who knows?But i like this war.

Friday, January 25, 2008

Example maven settings.xml for artifactory repository


maven settings.xml file may look like this picture
xx.xx.xx.xx :stands for internal server ip address

Configuring an internal maven repository with artifactory in Linux server

After you have successfully started artifactory service as root you need to go

http://localhost:8081/artifactory OR in our case
http://[serverip]:[serverport]/artifactory

[serverport] :
Artifactory comes with an artifactory.war file.When you start artifactory service it deploys it to jetty server which comes with artifactory.So serverport must point to used webserver default port where artifactory.war is deployed. Here in this case it is 8081 for jetty.For tomcat it 8080 as you forecast.

For first-time admin log in
username :admin
password :password

If you can't log in try to reinstall artifactory.May be some files that you dont know and already exists there override default behaviour which is extremely rare case but take my 4 hours.Be sure that files are yours and clean.

Now you successfully log in to web ui of artifactory.You can deploy your jars,versioning it,do some security settings here.It is the easy part to do.

But it is not the end. We want some behaviour from artifactory repository:

We want artifactory to download needed jars for our project on our internal server so each team member can download jars from internal server and don't have to go Maven Repository or other repositories on the internet. If server doesnt find needed jar on itself It (Server!) download jars on itself after maven command executed by one of the team members.

We should do some configuration to get these behaviour.

Setting up an internal maven repository with artifactory in Linux server

First of all i assume that you login as a root to linux.It s neccessary to be root for executing service.

./install.sh [arg1] :
This is expected to install artifactory as a linux service. [arg1] is the username of the JETTY_USER.Default is jetty.If you want to override (what i do) you can pass it an argument.(like artifactory)

my ARTIFACTORY_HOME is:
/opt/artifactory

and under ARTIFACTORY_HOME there is etc folder.Under etc execute

vi default

It should like this:
************************
#!/bin/sh

export JAVA_HOME=/opt/java/jre1.5.0_14
export JAVA_OPTIONS="-server -Xms400m -Xmx1g"

export ARTIFACTORY_HOME=/opt/artifactory

export JETTY_USER=artifactory

export JETTY_CONSOLE=${ARTIFACTORY_HOME}/logs/consoleout.log
*************************
JAVA_HOME should point to your jre folder.
JETTY_CONSOLE is where you can find log when artifactory start or may be failed to start which means 1.5 days for me.

Because my JETTY_USER is 'artifactory' there must be a user setting in /etc/init.d/artifactory.
This /etc/init.d/artifactory user MUST have read/write access to artifactory folder.So i suggest you to as a begginner in /opt/artifactory folder and simply write

chmod -R 777 *

and give full access to everybody just for beginning.You can easily configure it when you became more familiar to artifactory/linux/maven blah blah issues.

and here we go
we want to start artifactory via:
service artifactory start

If it says what the hell artifactory service is it means you did sth wrong so stop here and go steps above.Look at /opt/artifactory/etc/default file to check settings are correct.

I suggest you to open another session to linux server before executing start artifactory service and go to /opt/artifactory/logs folder
write :
tail -f consoleout.log
to see what is going on there

If it is successfully started you are lucky:) Almost every try i have a problem so be patient.

There are popular known errors:
java.lang.RuntimeException: Failed to read object from stream.
Failed to execute JcrCallback : FileNotFoundException on tmp file


I hope you successfully installed artifactory and now you can configure it.

Tuesday, January 22, 2008

Object Mentor

http://www.objectmentor.com/resources/publishedArticles.html

Very useful for software development.Especially Articles For Craftsman section. You can begin your jouney as an apprentice of Master Mr.C...