Our releases do not have any configuration files in artifact's, instead
manifest classpaths has directory name to point directory that has those
files. We use separate build to assembly different configurations into
different environments putting configurations in place.
I like to use Eclipse ability to hot deploy modifications of code into
server while debugging development trunk code.
So what you say and my experience it is impossible to use multi-module
project imported with project references for developing software with
hot deployment and also unit testing without having profiles to set
resource directories for Eclipse unit testing and deploying into server.
It's not so convenient to go outside IDE to deploy artifact into server
in order to debug / test modifications made.
Markku
On 2.3.2012 21:29, Ron Wheeler wrote:
I am not sure if this directly answers your question but perhaps a bit
of background helps.
We use Eclipse STS which comes with Maven support built in. We used to
waste so much time upgrading Eclipse and getting everyone configured
in the same way.
Now it is a single download (BIG) to get everything that you need
except Subversion.
We have individual projects since the project is divided up on
functional lines with core modules for the database access and some
modules that can best be described as utilities (messaging for example).
This means that for any maintenance activity almost all of the modules
are not affected.
In addition, modules are worked on by different people.
No one would have all of modules checked out at once. Certainly you
would not have them open in Eclipse.
We use SNAPSHOTs during development and maintenance.
We do not make all of the 70 modules carry the same release version.
It is possible to see a version 1.10.3 of the overall application
running with most of the WAR files as version 1.10 if they were bug
free up to the 1.10.3 release.
We do some unit testing and do most of our testing on the developer's
workstation.
We have at least 1 test server where developers can test in an
environment that is almost identical to production and can be tested
by the client(s). More than 1 if we have a big maintenance issue while
we are trying to get a major development tested. We are starting to
use the cloud for this so the actual number of test servers
potentially available is close to infinite.
We deploy the WAR files by hand to the appropriate server.
We use JNDI to support our Spring configurations so we do not have any
variation in the WARs between test and different production servers.
This is certainly not the only way to do things but I have never heard
of any problems with test classes or test configurations leaking into
production.
The build is described in the master POM for the project. The master
POM is the key to every project and contains everything that is common
between modules so the module poms are pretty small.
Below is the build description from the master POM for a project.
I hope that this helps a bit.
Ron
<build>
<sourceDirectory>src/main</sourceDirectory>
<scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>
<testSourceDirectory>src/test</testSourceDirectory>
<outputDirectory>target/classes</outputDirectory>
<testOutputDirectory>target/test-classes</testOutputDirectory>
<resources>
<resource>
<directory>src/main</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
<testResources>
<testResource>
<directory>test</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</testResource>
</testResources>
<directory>target</directory>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<encoding>UTF-8</encoding>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.5</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.2</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>
jar-with-dependencies
</descriptorRef>
</descriptorRefs>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
Ron
On 02/03/2012 2:00 PM, Markku Saarela wrote:
In multi-module project i hit the same problem with m2e and
maven-eclipse-plugin. Are you saying not to import multi-module
projects into Eclipse, instead every module separately? Or you don't
use server plugins to deploy application instead you deploy outside
Eclipse and use remote application debugging? But still this does not
prevent unit tests failing with multi-module configuration because of
this dependent project classpath has those artifacts in it's
classpath before it's own ones.
So if you have solution to this i am more than happy to hear it.
Markku
On 2.3.2012 17:50, Ron Wheeler wrote:
We have been developing and maintaining a large portal application
with over 70 WAR files in Eclipse with Maven since 2007 and several
smaller portals and standalone applications. We have not had this
problem.
That is not to say that I am an expert in Eclipse but we know enough
to make it work.
We do not use maven-eclipse-plug-in. We use the assembly plug-in to
build our war files.
Perhaps that is the difference.
We also deploy to Tomcat which might be a better servlet engine than
Glassfish.
I am not sure how relevant our experience is to your problem but if
I can provide any additional information that you think might help,
let me know.
Ron
On 02/03/2012 10:19 AM, Markku Saarela wrote:
Hi,
You don't understand how Eclipse IDE works. Eclipse does not have
different classpaths for testing and actual runtime. So Eclipse
basic design is faulty. There is bug open since 2008 to provide
means to tell Eclipse that which are test sources and not include
them to runtime classpath.
https://bugs.eclipse.org/bugs/show_bug.cgi?id=224708
So everything under src/test goes also into GlassFish server if you
deploy application in Eclipse. That causes that those unit test
properties and configuration and classes are picked first and they
are effective and application does not work.
Even worst if you have multi-module project and B module is
dependent from A and A project defines SPI interface and has in
src/test/java test implementation for that and of course in
src/test/resources/META-INF/services SPI file for exposing that
test SPI implementation then if B implements also that SPI
interface and put SPI file in src/main/resources/META-INF/services,
you cannot test you implementation via ServiceLoader because it
pick's that module A test implementation. Same goes for properties
and everything else.
Of course NetBeans and IntelliJ has correct way to do things but
they are not an option.
Markku
On 2.3.2012 15:15, Ron Wheeler wrote:
On 02/03/2012 1:32 AM, Markku Saarela wrote:
Hi,
Developing with Eclipse IDE and JavaEE server using
maven-eclipse-plugin you have to use profiles, because Eclipse
does not isolate test code and test resources.
Eclipse does
/src/main/.... code
/src/test ... test code and resources
You need to set your maven properly but it works fine unless I
don't understand your issue.
Only way to do it what i have figured out is to have two profiles
one for running application in app server and another for unit
testing same code. Those profiles has only resources and
testResources definitions.
Separating test code for separate code is not an option, because
then Sonar reports 0 % coverage.
rgds,
Markku
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]