Maven overwrites file with replaced string - war

I'm creating web-app with Java+Spring+FreeMarker, and, I want to write app version directly into FreeMarker template. I try using maven replacer plugin, but, when I create war package, file with replaced string (in target directory) becomes overriden with file with origin token.
Here is quote from pom.xml:
<plugin>
<groupId>com.google.code.maven-replacer-plugin</groupId>
<artifactId>replacer</artifactId>
<version>1.5.3</version>
<executions>
<execution>
<phase>generate-resources</phase>
<goals>
<goal>replace</goal>
</goals>
</execution>
</executions>
<configuration>
<includes>
<include>${basedir}\src\main\webapp\templates\include\version.ftl
</include>
</includes>
<outputFile>${basedir}\target\${project.build.finalName}\templates\include\version.ftl
</outputFile>
<replacements>
<replacement>
<token>version</token>
<value>${project.build.finalName}</value>
</replacement>
</replacements>
</configuration>
</plugin>
What I'm doing wrong?

I've found solution. Need to use prepare-package phase in war plugin:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<useCache>true</useCache>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
<version>2.6</version>
<executions>
<execution>
<id>prepare-war</id>
<phase>prepare-package</phase>
<goals>
<goal>exploded</goal>
</goals>
</execution>
</executions>
</plugin>

Related

Error: Unable to initialize main class home.bank_application.BankAppRunner

I can't execute my jar of application. And I have that error:
Error: Unable to initialize main class home.bank_application.BankAppRunner
Caused by: java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext
My plugins for jar in pom.xml:
<plugin>
<!-- Build an executable JAR -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>home.bank_application.BankAppRunner</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<mainClass>home.bank_application.BankAppRunner</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-jar-with-dependencies</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
When I build the project with "mvn clean intall" plugin "maven-assembly-plugin" doesn't install. I wish my project was built without all dependencies. How can I build my project with dependencies?

Create empty folder on Karaf / ODL / Opendaylight

I need to create an empty folder when installing a feature.
Any suggestion?
So far I tried something like(without success):
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>empty-config-folder</id>
<phase>prepare-package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<mkdir dir="${project.build.directory}/assembly/etc/empty-folder" />
</target>
</configuration>
</execution>
</executions>
</plugin>
You can simply create the folder in Java code inside one of the bundles you install. See File.mkdirs()

Integration test report with failsafe and jacoco shows 0% coverage

Goal:Use failsafe and jacoco,the two plugins to create integration test report.
Issue:The report expected is created but it shows that coverage is 0%.
report html
Here goes the code in pom.xml about jacoco.
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.8-SNAPSHOT</version>
<executions>
<execution>
<!--prepare-agent -->
</execution>
<execution>
<!--report -->
</execution>
<execution>
<id>pre-integration-test</id>
<phase>pre-integration-test</phase>
<goals>
<goal>prepare-agent-integration</goal>
</goals>
<configuration>
<!-- Sets the path to the file which contains the execution data. -->
<destFile>${project.build.directory}/coverage-reports/jacoco-it.exec</destFile>
<!-- Sets the name of the property containing the settings for JaCoCo
runtime agent. -->
<propertyName>failsafeArgLine</propertyName>
</configuration>
</execution>
<execution>
<id>post-integration-test</id>
<phase>integration-test</phase>
<goals>
<goal>report-integration</goal>
</goals>
<configuration>
<!-- Sets the path to the file which contains the execution data. -->
<dataFile>${project.build.directory}/coverage-reports/jacoco-it.exec</dataFile>
<!-- Sets the output directory for the code coverage report. -->
<outputDirectory>${project.reporting.outputDirectory}/jacoco-it</outputDirectory>
</configuration>
</execution>
<execution>
<!--check -->
</execution>
</executions>
</plugin>
And here is code about failsafe.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.16</version>
<executions>
<execution>
<id>execute-local-integration-tests</id>
<phase>integration-test</phase>
<goals>
<goal>integration-test</goal>
</goals>
<configuration>
<systemPropertyVariables>
<integration.test.server.url>http://${local.server.host}:${local.server.http.port}</integration.test.server.url>
</systemPropertyVariables>
</configuration>
</execution>
<execution>
<id>verify-local-integration-tests</id>
<goals>
<goal>verify</goal>
</goals>
</execution>
</executions>
<configuration>
<!-- Sets the VM argument line used when integration tests are run. -->
<argLine>${failsafeArgLine}</argLine>
<skip>${skipIntegrationTests}</skip>
<excludes>
<exclude>**/unittest/**/*Test.java</exclude>
<exclude>**/unittest/**/*UT.java</exclude>
</excludes>
<includes>
<include>**/integrationtest/*IT.java</include>
</includes>
</configuration>
</plugin>
I have worked on it for a long time. Waiting for your help and, thanks.

Maven failsafe plugin does not execute tests

I have a problem with Maven Failsafe plugin that does not execute my tests.
The test is stored in folder \src\test\java\ and its name is Test1IT.java which is in the correct format.
In addition I have to exclude this test in Maven compiler plugin,because this test is dependent on jetty run.
Here is the pom.xml
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
<executions>
<execution>
<id>default-testCompile</id>
<phase>test-compile</phase>
<configuration>
<testExcludes>
<exclude>**/*.java</exclude>
</testExcludes>
</configuration>
<goals>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.19</version>
<executions>
<execution>
<id>integration-test</id>
<goals>
<goal>integration-test</goal>
</goals>
</execution>
<execution>
<id>verify</id>
<goals>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
If executed mvn verify it builds everything, start jetty and return
[INFO] --- maven-failsafe-plugin:2.19:integration-test (integration-test) # application ---
[INFO] No tests to run.
What is the problem?
Actually after several hours of experimenting with Maven I was able to find working version:
Here is the pom.xml file
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.19</version>
<executions>
<execution>
<id>integration-tests</id>
<goals>
<goal>integration-test</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.2.2.v20140723</version>
<configuration>
<scanIntervalSeconds>10</scanIntervalSeconds>
<stopPort>9966</stopPort>
<stopKey>abc</stopKey>
<webApp>
<contextPath>/hellojavaworld</contextPath>
</webApp>
</configuration>
<executions>
<execution>
<id>start-jetty</id>
<phase>pre-integration-test</phase>
<goals>
<goal>run-war</goal>
</goals>
<configuration>
<daemon>true</daemon>
<scanIntervalSeconds>0</scanIntervalSeconds>
</configuration>
</execution>
<execution>
<id>stop-jetty</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>
Be careful about used version for maven jetty plugin. For my particular scenario the latest working version is 9.2.2.v20140723. Any newer version have malfunction. It just starts jetty and script does not continue further. I am not sure if this is a bug, but it should not happen.
Hope this post helps.

flexmojos:copy-flex-resources not copying resource files

Hi i had been setting up a flex project, its basically into 3 modules, a flex, a java and a war project. Am able to compile all, but the flexmojos:copy-flex-resources plugin only copies the ".swf" file into the webapp directory. There are other files like html wrapper which are skipped. Had anyone sort it out. Thanks!
My SWF POM
swf Application
<properties>
<path_to_services_config_xml>${basedir}/src/main/resources/services-config.xml</path_to_services_config_xml>
</properties>
<build>
<sourceDirectory>src/main/flex</sourceDirectory>
<testSourceDirectory>src/test/flex</testSourceDirectory>
<directory>target</directory>
<plugins>
<plugin>
<groupId>org.sonatype.flexmojos</groupId>
<artifactId>flexmojos-maven-plugin</artifactId>
<!-- <version>3.8</version> -->
<executions>
<execution>
<id>html-wrapper</id>
<goals>
<goal>wrapper</goal>
</goals>
<configuration>
<templateURI>folder:/html-template</templateURI>
<parameters>
<swf>${project.build.finalName}</swf>
<width>100%</width>
<height>100%</height>
<version_major>${flash.major}</version_major>
<version_minor>${flash.minor}</version_minor>
<version_revision>${flash.revision}</version_revision>
<bgcolor>#FFFFFF</bgcolor>
</parameters>
<htmlName>Main</htmlName>
<!-- <targetPlayer>${flash.major}.${flash.minor}.${flash.revision}</targetPlayer> -->
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>com.adobe.flex.compiler</groupId>
<artifactId>flex-compiler-oem</artifactId>
<version>4.5.1.21328</version>
</dependency>
</dependencies>
<extensions>true</extensions>
<configuration>
<debug>true</debug>
<!-- <output>target/bin/</output> <sourcePaths> <path>src/main</path>
</sourcePaths> Configuration to copy assets (Images) folder to target -->
<includeFileSets>
<fileset>
<directory>src/main/assets</directory>
<includes>
<include>*.*</include>
</includes>
</fileset>
</includeFileSets>
<!-- service-config.xml specification (path defined above) -->
<services>${path_to_services_config_xml}</services>
<!-- Context Root URL -->
<contextRoot>clv-web-0.3</contextRoot>
<localesCompiled>
<locale>en_US</locale>
<locale>fr_FR</locale>
</localesCompiled>
<localesSourcePath>${basedir}/src/main/locale/{locale}</localesSourcePath>
<!-- <localesSourcePath>${basedir}/src/main/locale/fr_FR</localesSourcePath> -->
<!-- <templateURI>${basedir}/html-template/</templateURI> <outputDir>target/flex-html</outputDir>
<htmlName>myindex.html</htmlName> <parameters> <swf>${build.finalName}</swf>
</parameters> -->
</configuration>
<!-- <executions> <execution> <goals> <goal>wrapper</goal> </goals> </execution>
</executions> -->
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>com.adobe.flex.framework</groupId>
<artifactId>flex-framework</artifactId>
<version>4.5.1.21328</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>com.adobe.flexunit</groupId>
<artifactId>flexunit</artifactId>
<version>0.85</version>
<type>swc</type>
<scope>test</scope>
</dependency>
and my war POM is
<packaging>war</packaging>
<build>
<plugins>
<plugin>
<groupId>org.sonatype.flexmojos</groupId>
<artifactId>flexmojos-maven-plugin</artifactId>
<version>4.1-beta</version>
<extensions>true</extensions>
<executions>
<!-- <execution> <id>wrapper</id> <phase>generate-resources</phase>
<goals> <goal>wrapper</goal> </goals> <configuration> <wrapperArtifact> <groupId>com.cat.clv.swf</groupId>
<artifactId>clv-swf</artifactId> <version>0.3</version> </wrapperArtifact>
<htmlName>Main</htmlName> </configuration> </execution> -->
<execution>
<goals>
<goal>copy-flex-resources</goal>
</goals>
<configuration>
<webappDirectory>>${basedir}/src/main/webapp/demo</webappDirectory>
<stripVersion>true</stripVersion>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.2</version>
<configuration>
<webResources>
<resource>
<!-- this is relative to the pom.xml directory -->
<directory>src/main/webapp</directory>
</resource>
</webResources>
<debug>true</debug>
<!-- <warSourceExcludes>index.template.html</warSourceExcludes> <webResources>
<resource> <directory>target</directory> </resource> </webResources> -->
</configuration>
</plugin>
I am the guy who has officially taken over development of flexmojos.
The problem you are encountering might be related to some changes in flexmojos staring with 3.x (don't remember the version) I was having the same problems as you were. While searching for the reason I found out that flexmojos was having trouble determining the finalName from the projects pom because in some cases maven throws errors. As I was specifying the finalName myself I solved the problem by setting false in the copy-flex-resources configuration. Eventually this helps.
Another solution I had to use in a different project was to explicitly use an oder version of the copy-flex-resources mojo in my war project. 3.7.1 seems to be the last version without this problem.
Unfortunately I didn't manage to sort out this error yet, but it's still on my radar.
Chris
I had a very similar configuration issue with flexmojos-maven-plugin version 3.8 which I fixed by adding by warSourceDirectoryPath to the outputDirectory of the wrapper goal config in the swf project:
I defined a property:
warSourceDirectoryPath = ../workbench-server/src/main/webapp/flex
<plugin>
<groupId>org.sonatype.flexmojos</groupId>
<artifactId>flexmojos-maven-plugin</artifactId>
<version>3.8</version>
<executions>
<execution>
<id>flex-ui-wrapper</id>
<phase>generate-resources</phase>
<goals>
<goal>wrapper</goal>
</goals>
<configuration>
<templateURI>folder:/html-template</templateURI>
<templateOutputDirectory>${project.build.directory}/templates</templateOutputDirectory>
<outputDirectory>${warSourceDirectoryPath}</outputDirectory>
<parameters>
<swf>${project.build.finalName}</swf>
<title>Workbench</title>
<application>myapp</application>
</parameters>
<htmlName>Workbench</htmlName>
</configuration>
</execution>
</executions>
<dependencies>
...
</dependencies>
<extensions>true</extensions>
<configuration>
<debug>true</debug>
<sourceFile>${basedir}/src/main/flex/Workbench.mxml</sourceFile>
<contextRoot>/workbench-server</contextRoot>
<generateHtmlWrapper>true</generateHtmlWrapper>
<targetPlayer>11.1.0</targetPlayer>
<!-- <services>generated-resources</services> this is the default -->
</configuration>
</plugin>
Hope that helps.

Resources