On 5 February 2010 06:45, Søren Krogh Neigaard <
soeren.krogh.neiga...@systematic.com> wrote:

> Thank you all for your answers
>
> I tried adding the following to my pom.xml
>
> <properties>
>  <database.driver>oracle.jdbc.OracleDriver</database.driver>
>  <database.url>${database.url}</database.url>
>  <database.username>${database.username}</database.username>
>  <database.password>${database.password}</database.password>
> </properties>
>
> And tried reading with System.getProperty("database.username"), but it gave
> me null.
>
>
Are you doing this from within a JUnit test launched by either
maven-surefire-plugin or maven-failsafe-plugin?

If so then the reason you cannot read the properties is because surefire is
cleaning up the system properties in order to encourage keeping your code
decoupled from maven... (which actually is a good thing... good build tools
should not lock you in, and should encourage you to do things in a way where
you are not locked into your build tool... that way you will continue to use
that build tool because it is the best, and not because you are locked in)

There are really two ways to solve your problem...

1. Read the connection details from a file on the classpath, e.g. in your
unit test you would do something like:

public class MyTest {

    ...

    private final Properties properties = new Properties();

    @Before
    public void setUp() throws IOException {
        properties.load(getClass().getResourceAsStream("/test.properties"));
        ...
    }

   ...

}

you then enabling filtering on the properties file which you put in
src/test/resources, e.g. for the above example you would put your properties
in ${basedir}/src/test/resources/test.properties

For most of my projects, I get fed up enabling filtering on specific files,
so I just have this in our corporate root pom:

        <resources>
            <resource>
                <filtering>false</filtering>

<directory>${basedir}/src/main/resources/verbatim</directory>
            </resource>
            <resource>
                <filtering>true</filtering>

<directory>${basedir}/src/main/resources/filtered</directory>
            </resource>
        </resources>
        <testResources>
            <testResource>
                <filtering>false</filtering>

<directory>${basedir}/src/test/resources/verbatim</directory>
            </testResource>
            <testResource>
                <filtering>true</filtering>

<directory>${basedir}/src/test/resources/filtered</directory>
            </testResource>
        </testResources>

And I would but test.properties in ${basedir}/src/test/resources/filtered

2. Read the connection details from the System properties... this requires
telling Surefire/Failsafe to set the system properties, see
http://maven.apache.org/plugins/maven-surefire-plugin/examples/system-properties.html

HTH

-Stephen

The reason for the ${database.url} and so on, is that it gets its values
> from either a default settings.xml or a user specific settings.xml, and that
> is how I need it to be. We are already using the sql-maven-plugin to
> bootstrap the database, but it only gets run once before all junit tests are
> run, and that is not what I need, I need it to run for every test to ensure
> a clean database.
>
> I can easily make some code that drops my tables and so on, but I need the
> correct database properties from the correct settings.xml.
>
> Bernd you talked about making a plugin that gets called before every test,
> how can I do this?
>
> Med venlig hilsen / Kind regards
>
>
> Søren Krogh Neigaard
> Systems Engineer
>
> Søren Frichs Vej 39, 8000 Aarhus C
> Denmark
>
> Mobile +4541965252
> soeren.krogh.neiga...@systematic.com
> www.systematic.com
>
>
> -----Original Message-----
> From: bernd.adamow...@external.icw-global.com [mailto:
> bernd.adamow...@external.icw-global.com]
> Sent: 4. februar 2010 11:59
> To: Maven Users List
> Subject: Re: Read properties from pom.xml from Java
>
> Sounds like this might help you:
>
> - Create a Maven plugin which is executed in any phase >>bevore<< test,
> e.g. 'generate-test-resources'. This will make it possible to set up the
> database. This plugin might help for starting the database (only if you're
> using HSQL):
>
> http://gforge.openehealth.org/gf/project/development/wiki/?pagename=Documentation+HSQLDB+plugin
> , but there are others, too.
>
> - Reading of POM-properties inside a Maven plugin is easy and described
> here:
>
> http://www.sonatype.com/books/mvnref-book/reference/writing-plugins-sect-mojo-params.html#writing-plugins-sect-param-values
>
> However, the scenario described by you clearly indicates that this is not
> a unit test instead it is an integration test where other rules/plugins
> might apply, e.g. maven-invoker-plugin. But this would recommend a
> restructuring of your project and might not be what you want.
>
> Bernd
>
>
>
>
>
>
> Søren Krogh Neigaard <soeren.krogh.neiga...@systematic.com> wrote on
> 04.02.2010 09:59:26:
>
> > [image removed]
> >
> > Read properties from pom.xml from Java
> >
> > Søren Krogh Neigaard
> >
> > to:
> >
> > users
> >
> > 04.02.2010 10:00
> >
> > Please respond to "Maven Users List"
> >
> > Hi
> >
> >
> >
> > I have been tossed into a maven controlled project. We run our junit
> > tests from Eclipse and also on our build server. When ever they are
> > run, some maven magic happens so that username/password/driver/url
> > for the dabase is correctly set for the user pc or the buildserver.
> > However I need to make a small helper class for my junit tests that
> > wipes the database and loads some testdata on the database for every
> > junit test.
> >
> >
> >
> > The username/password/driver/url for the database is set in the
> > pom.xml file by maven. How do I read these values from my Java helper
> class?
> >
> >
> >
> > Best regards
> >
> > Søren
> >
> >
> >
>
>
>
> InterComponentWare AG:
> Vorstand: Peter Kirschbauer (Vors.), Jörg Stadler / Aufsichtsratsvors.:
> Prof. Dr. Christof Hettich
> Firmensitz: 69190 Walldorf, Industriestraße 41 / AG Mannheim HRB 351761 /
> USt.-IdNr.: DE 198388516  =
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@maven.apache.org
> For additional commands, e-mail: users-h...@maven.apache.org
>
>

Reply via email to