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?
Related
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()
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>
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.
I am trying to minify my JS file using google closure compiler
I used the following simple POM file
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xxx</groupId>
<artifactId>closurecompiler</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>closurecompiler Maven Webapp</name>
<url>http://maven.apache.org</url>
<build>
<finalName>closurecompilertest</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>com.google.javascript</groupId>
<artifactId>closure-compiler</artifactId>
<version>r1810</version>
<type>jar</type>
<overWrite>true</overWrite>
<outputDirectory>target/builddependency</outputDirectory>
<destFileName>closure-compiler.jar</destFileName>
</artifactItem>
<artifactItem>
<groupId>args4j</groupId>
<artifactId>args4j</artifactId>
<version>2.0.12</version>
<type>jar</type>
<overWrite>true</overWrite>
<outputDirectory>target/builddependency</outputDirectory>
<destFileName>args4j.jar</destFileName>
</artifactItem>
<artifactItem>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>r07</version>
<type>jar</type>
<overWrite>true</overWrite>
<outputDirectory>target/builddependency</outputDirectory>
<destFileName>guava.jar</destFileName>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<phase>generate-sources</phase>
<configuration>
<target>
<echo
message="Minifying JS files. This takes a few minutes, please be patient" />
<apply executable="java" failOnError="true">
<arg line="-cp target/builddependency/args4j.jar;target/builddependency/guava.jar;target/builddependency/closure-compiler.jar com.google.javascript.jscomp.CommandLineRunner --compilation_level WHITESPACE_ONLY --charset UTF-8 --js " />
<fileset dir="src/main/webapp/js/" includes="*.js" />
<redirector>
<outputmapper id="out" type="glob" from="*.js" to="target/cc/*.js" />
</redirector>
</apply>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
i placed three js files in the source and when I check the output folder, i am getting empty files without any content
The same command works fine if run in command prompt.
any idea why i am getting empty file?
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.