Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

With maven - clean package, xml source files are not included in classpath

Tags:

So it seems that Maven package is setup by default to compile but not copy xml files in the java classpath, unless they're already there. In Eclipse, I created the simplest test, a default spring mvc template app. There are only two files in the java source, a java controller and dummy xml file. The pom is:

<?xml version="1.0" encoding="UTF-8"?> <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.test</groupId>     <artifactId>test</artifactId>     <name>abc</name>     <packaging>war</packaging>     <version>1.0.0-BUILD-SNAPSHOT</version>     <properties>         <java-version>1.6</java-version>         <org.springframework-version>3.0.6.RELEASE</org.springframework-version>         <org.aspectj-version>1.6.9</org.aspectj-version>         <org.slf4j-version>1.5.10</org.slf4j-version>     </properties>     <dependencies>         <!-- Spring -->         <dependency>             <groupId>org.springframework</groupId>             <artifactId>spring-context</artifactId>             <version>${org.springframework-version}</version>             <exclusions>                 <!-- Exclude Commons Logging in favor of SLF4j -->                 <exclusion>                     <groupId>commons-logging</groupId>                     <artifactId>commons-logging</artifactId>                  </exclusion>             </exclusions>         </dependency>         <dependency>             <groupId>org.springframework</groupId>             <artifactId>spring-webmvc</artifactId>             <version>${org.springframework-version}</version>         </dependency>          <!-- AspectJ -->         <dependency>             <groupId>org.aspectj</groupId>             <artifactId>aspectjrt</artifactId>             <version>${org.aspectj-version}</version>         </dependency>             <!-- Logging -->         <dependency>             <groupId>org.slf4j</groupId>             <artifactId>slf4j-api</artifactId>             <version>${org.slf4j-version}</version>         </dependency>         <dependency>             <groupId>org.slf4j</groupId>             <artifactId>jcl-over-slf4j</artifactId>             <version>${org.slf4j-version}</version>             <scope>runtime</scope>         </dependency>         <dependency>             <groupId>org.slf4j</groupId>             <artifactId>slf4j-log4j12</artifactId>             <version>${org.slf4j-version}</version>             <scope>runtime</scope>         </dependency>         <dependency>             <groupId>log4j</groupId>             <artifactId>log4j</artifactId>             <version>1.2.15</version>             <exclusions>                 <exclusion>                     <groupId>javax.mail</groupId>                     <artifactId>mail</artifactId>                 </exclusion>                 <exclusion>                     <groupId>javax.jms</groupId>                     <artifactId>jms</artifactId>                 </exclusion>                 <exclusion>                     <groupId>com.sun.jdmk</groupId>                     <artifactId>jmxtools</artifactId>                 </exclusion>                 <exclusion>                     <groupId>com.sun.jmx</groupId>                     <artifactId>jmxri</artifactId>                 </exclusion>             </exclusions>             <scope>runtime</scope>         </dependency>          <!-- @Inject -->         <dependency>             <groupId>javax.inject</groupId>             <artifactId>javax.inject</artifactId>             <version>1</version>         </dependency>          <!-- Servlet -->         <dependency>             <groupId>javax.servlet</groupId>             <artifactId>servlet-api</artifactId>             <version>2.5</version>             <scope>provided</scope>         </dependency>         <dependency>             <groupId>javax.servlet.jsp</groupId>             <artifactId>jsp-api</artifactId>             <version>2.1</version>             <scope>provided</scope>         </dependency>         <dependency>             <groupId>javax.servlet</groupId>             <artifactId>jstl</artifactId>             <version>1.2</version>         </dependency>          <!-- Test -->         <dependency>             <groupId>junit</groupId>             <artifactId>junit</artifactId>             <version>4.7</version>             <scope>test</scope>         </dependency>             </dependencies>     <build>         <plugins>             <plugin>                 <groupId>org.apache.maven.plugins</groupId>                 <artifactId>maven-compiler-plugin</artifactId>                 <configuration>                     <source>${java-version}</source>                     <target>${java-version}</target>                 </configuration>             </plugin>             <plugin>                 <groupId>org.apache.maven.plugins</groupId>                 <artifactId>maven-war-plugin</artifactId>                 <configuration>                     <warName>abc</warName>                 </configuration>             </plugin>             <plugin>                 <groupId>org.apache.maven.plugins</groupId>                 <artifactId>maven-dependency-plugin</artifactId>                 <executions>                     <execution>                         <id>install</id>                         <phase>install</phase>                         <goals>                             <goal>sources</goal>                         </goals>                     </execution>                 </executions>             </plugin>             <plugin>                 <groupId>org.apache.maven.plugins</groupId>                 <artifactId>maven-resources-plugin</artifactId>                 <version>2.5</version>                 <configuration>                     <encoding>UTF-8</encoding>                 </configuration>             </plugin>         </plugins>     </build> </project> 

When I build the project in Eclipse (project->clean), both the java class and xml file are output in the classes folder. If I run a maven -> package, everything is also just fine, all files still in final war. But if I run a maven -> clean package, Maven does not seem to be able to pickup the xml file in the classpath, as it's missing in the classes folder and war. Is there something extra that has to be done to get Maven to do this?

I'm using Springsource Toolsuite 2.8 (eclipse indigo), Maven 3.0.2

like image 686
chrismarx Avatar asked Mar 21 '12 05:03

chrismarx


People also ask

Does Maven add to classpath?

Maven Archiver can add the classpath of your project to the manifest. This is done with the <addClasspath> configuration element.

How do I find my classpath in Maven?

The Maven Dependency plugin provides the simplest way to display the classpath: $ mvn dependency:build-classpath [INFO] Scanning for projects...

What does clean do in Maven?

The Maven Clean Plugin, as the name implies, attempts to clean the files and directories generated by Maven during its build. While there are plugins that generate additional files, the Clean Plugin assumes that these files are generated inside the target directory.

What does the given command do Mvn dependency build classpath?

Description: This goal outputs a classpath string of dependencies from the local repository to a file or log.


1 Answers

By default maven does not include any files from "src/main/java" (${sourceDirectory} variable). You have two possibilities (choose one of them):

  • put all your resource files (different than java files) to "src/main/resources" - recomended
  • Add to your pom (example from gwt plugin):

    <build>     <resources>         <resource>             <directory>src/main/java</directory>             <includes>                                       <include>**/*.xml</include>             </includes>         </resource>         <resource>             <directory>src/main/resources</directory>         </resource>     </resources> </build> 
like image 161
Andrzej Jozwik Avatar answered Sep 25 '22 22:09

Andrzej Jozwik