views:

150

answers:

2

I have to build an application using Maven for PHP that has multiple modules. The scenario in which the maven seems to not work is this: I have a common module and a client module depending on the first one. When doing "mvn test" on the client module which depends on the common module, the test fails to see the paths to the common module. Is there a flow in my build or this is just not possible?

I attached my pom.xml files.

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.sample</groupId>
    <artifactId>my-app_package</artifactId>
    <packaging>pom</packaging>
    <name>Sample PHP Maven multi module project</name>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>common-module</module>
        <module>client1-module</module>
    </modules>
    <build>
        <plugins>
            <plugin>
                <groupId>org.phpmaven</groupId>
                <artifactId>maven-php-plugin</artifactId>
                <extensions>true</extensions>
                <version>1.0</version>              
                <configuration>
                    <ignoreValidate>true</ignoreValidate>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>org.phpunit</groupId>
            <artifactId>phpunit5</artifactId>
            <version>3.3.9</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
<reporting>
    <plugins>
        <plugin>
            <groupId>org.phpmaven</groupId>
            <artifactId>maven-php-plugin</artifactId>
            <version>1.0</version>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-report-plugin</artifactId>
            <version>2.4</version>
            <reportSets>
                <reportSet>
                    <reports>
                        <report>report-only</report>
                    </reports>
                </reportSet>
            </reportSets>
        </plugin>
    </plugins>
</reporting>
</project>

common-module/pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.sample</groupId>
    <artifactId>my-app</artifactId>
    <packaging>php</packaging>
    <name>Client1 module</name>
    <version>1.0-SNAPSHOT</version>
    <build>
        <plugins>
            <plugin>
                <groupId>org.phpmaven</groupId>
                <artifactId>maven-php-plugin</artifactId>
                <extensions>true</extensions>
                <version>1.0</version>              
                <configuration>
                    <ignoreValidate>true</ignoreValidate>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>org.sample</groupId>
            <artifactId>common-module</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.phpunit</groupId>
            <artifactId>phpunit5</artifactId>
            <version>3.3.9</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

common-module/pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.sample</groupId>
    <artifactId>common-module</artifactId>
    <packaging>php</packaging>
    <name>Common module</name>
    <version>1.0-SNAPSHOT</version>

    <build>
        <plugins>
            <plugin>
                <groupId>org.phpmaven</groupId>
                <artifactId>maven-php-plugin</artifactId>
                <extensions>true</extensions>
                <version>1.0</version>              
                <configuration>
                    <ignoreValidate>true</ignoreValidate>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>org.phpunit</groupId>
            <artifactId>phpunit5</artifactId>
            <version>3.3.9</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>
+1  A: 

Is it possible to build multi module structure with Maven for PHP?

To strictly answer this question, I'm pretty sure it's possible. But for this, you should start maven from the parent project and run a so called "multi-modules build" which is not what you're doing.

My understanding is that you have something like this:

myproject
|-- common
|   `-- pom.xml
|-- client
|   `-- pom.xml
`-- pom.xml      <-- run maven from here for a multi-modules build

But to be honest, some parts of your question are unclear. For example, what do you mean by "the test fails to see the paths to the common module"? Also, why do you run mvn site instead of say mvn install? Generating the site is not the most usual way to run a build. Is this really what you want?

Pascal Thivent
I edited the question and corrected the "mvn site" with "mvn test". The problem is that despite the fact that the client module depends on the common module, when I do a "mvn install" or "mvn test" there is a problem, the "require_once("main/php/org/sample/appcommon.php");" fails because the path is not recognized. It searches for the specified file in the path of the client module, instead of the common module. So the problem is this: how to determine maven to include the paths to my common module when running the scripts from my client module. Is there any way of doing it for PHP?
Softy
Can anybody help? Please?
Softy
A: 

It works, you just need to install your dependency module BEFORE trying to build a module that depends on that module. Or else it won't find it.

Softy