Generated target files after build doesn't contain all the compiled classes that must have been there

14,375

Solution 1

I found that the issue was due to some of the uncompilable classes inside the source packages because of that none of classes were being copied to the /target/classes/ folder. On removing the uncompilable source code I found it to be working fine.

Solution 2

maven does not place generated contents in src/main/webapp/WEB-INF/classes folder.

By default (and from the pom snippet above), it places the compiled classes in target/classes folder. In case of a war project, maven war plugin copies the classes to WEB-INF/classes folder within the webapp.

So, in your case, check the following folders:

  • C:\dev\ABCApp\target\classes
  • C:\dev\ABCApp\target\ABCApp\WEB-INF\classes

Solution 3

This also occurs with certain versions of the maven-compiler-plugin

The following fix resolved the issue for me and maven now correctly reports compiler errors. With the commented version below, maven would build successfully despite uncompilable code.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.0</version>
    <!--This version will happily build successfully when the code fails to compile-->
    <!--<version>3.1</version>-->
</plugin>
Share:
14,375
Rajat Gupta
Author by

Rajat Gupta

A problem solver &amp; enthusiastic programmer looking out for exciting work opportunities. Highly interested in building Android applications, Web development, &amp; Server side coding involving (sql/ nosql) databases &amp; APIs. I love solving problems, building efficient approaches &amp; algorithms. To describe my strong points, I have pretty decent problem solving skills, fast learner &amp; highly motivated &amp; energetic person! Gained good experience in software development in the past 2 years working on numerous android &amp; web development projects with companies like olready.in, twowaits.com, spactre.com. Selected among Top three finalists for LinkedIn MTV GetAJob Season 4 for Flipkart as Software Developer Intern among 50k candidates.

Updated on June 26, 2022

Comments

  • Rajat Gupta
    Rajat Gupta almost 2 years

    While building the project, the console shows that the source packages were compiled(the one inside px10 package)

    However if I see the target files generated, none of the classes are there from source package.

    1. tried clean & build several times but doesnt help
    2. cleared the netbeans cache from .../var/cache/

    Here is the log generated while building the web app

    ------------------------------------------------------------------------
    Building ABCApp Java EE 6 Webapp 1.0
    ------------------------------------------------------------------------
    
    [antrun:run]
    Executing tasks
    Executed tasks
    
    [resources:resources]
    Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!
    Copying 13 resources
    
    [compiler:compile]
    File encoding has not been set, using platform encoding Cp1252, i.e. build is platform dependent!
    Compiling 81 source files to C:\dev\ABCApp\target\classes
    px10/BusinessLayer/LOBERs/connect.java:[248,38] ';' expected
    px10/BusinessLayer/User/User_2.java:[127,52] '.class' expected
    
    [resources:testResources]
    Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!
    Copying 1 resource
    
    [compiler:testCompile]
    Nothing to compile - all classes are up to date
    
    [surefire:test]
    Surefire report directory: C:\dev\ABCApp\target\surefire-reports
    
    -------------------------------------------------------
     T E S T S
    -------------------------------------------------------
    There are no tests to run.
    
    Results :
    
    Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
    
    
    [war:war]
    Packaging webapp
    Assembling webapp [ABCApp] in [C:\dev\ABCApp\target\ABCApp]
    Processing war project
    Copying webapp resources [C:\dev\ABCApp\src\main\webapp]
    Webapp assembled in [1841 msecs]
    Building war: C:\dev\ABCApp\target\ABCApp.war
    Warning: selected war files include a WEB-INF/web.xml which will be ignored 
    (webxml attribute is missing from war task, or ignoreWebxml attribute is specified as 'true')
    
    [install:install]
    Installing C:\dev\ABCApp\target\ABCApp.war to C:\dev\mavenRepository\w93\ABCApp\1.0\ABCApp-1.0.war
    Installing C:\dev\ABCApp\pom.xml to C:\dev\mavenRepository\w93\ABCApp\1.0\ABCApp-1.0.pom
    ------------------------------------------------------------------------
    BUILD SUCCESS
    ------------------------------------------------------------------------
    Total time: 9.053s
    Finished at: Tue Oct 04 11:49:46 IST 2011
    Final Memory: 6M/15M
    ------------------------------------------------------------------------
    

    This issue seems to be arising since I have deleted a folder named classes from inside web-inf folder which I myself had created.

    Here is the effective POM for the project:

    <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/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>w93</groupId>
      <artifactId>ABCApp</artifactId>
      <version>1.0</version>
      <packaging>war</packaging>
      <name>ABCApp Java EE 6 Webapp</name>
      <url>http://maven.apache.org</url>
      <properties>
        <netbeans.hint.deploy.server>gfv3ee6</netbeans.hint.deploy.server>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      </properties>
      <dependencies>
        <dependency>
          <groupId>com.sun.faces</groupId>
          <artifactId>jsf-api</artifactId>
          <version>2.1.3_01</version>
          <scope>compile</scope>
        </dependency>
        <dependency>
          <groupId>com.sun.faces</groupId>
          <artifactId>jsf-impl</artifactId>
          <version>2.1.3_01</version>
          <scope>compile</scope>
        </dependency>
        <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>jstl</artifactId>
          <version>1.2</version>
          <scope>compile</scope>
        </dependency>
        <dependency>
          <groupId>taglibs</groupId>
          <artifactId>standard</artifactId>
          <version>1.1.2</version>
          <scope>compile</scope>
        </dependency>
        <dependency>
          <groupId>javax</groupId>
          <artifactId>javaee-web-api</artifactId>
          <version>6.0</version>
          <scope>provided</scope>
        </dependency>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.2</version>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>ch.qos.logback</groupId>
          <artifactId>logback-classic</artifactId>
          <version>0.9.30</version>
          <scope>compile</scope>
        </dependency>
        <dependency>
          <groupId>org.primefaces</groupId>
          <artifactId>primefaces</artifactId>
          <version>3.0.M3</version>
          <scope>compile</scope>
        </dependency>
        <dependency>
          <groupId>com.google.protobuf</groupId>
          <artifactId>protobuf-java</artifactId>
          <version>2.4.1</version>
          <scope>compile</scope>
        </dependency>
        <dependency>
          <groupId>commons-fileupload</groupId>
          <artifactId>commons-fileupload</artifactId>
          <version>1.2.2</version>
          <scope>compile</scope>
        </dependency>
      </dependencies>
      <repositories>
        <repository>
          <id>java.net2</id>
          <name>Repository hosting the jee6 artifacts</name>
          <url>http://download.java.net/maven/2</url>
        </repository>
        <repository>
          <id>jsf20</id>
          <name>Repository for library Library[jsf20]</name>
          <url>http://download.java.net/maven/2/</url>
        </repository>
        <repository>
          <id>prime-repo</id>
          <name>PrimeFaces Maven Repository</name>
          <url>http://repository.primefaces.org</url>
        </repository>
        <repository>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
          <id>central</id>
          <name>Maven Repository Switchboard</name>
          <url>http://repo1.maven.org/maven2</url>
        </repository>
      </repositories>
      <pluginRepositories>
        <pluginRepository>
          <releases>
            <updatePolicy>never</updatePolicy>
          </releases>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
          <id>central</id>
          <name>Maven Plugin Repository</name>
          <url>http://repo1.maven.org/maven2</url>
        </pluginRepository>
      </pluginRepositories>
      <build>
        <sourceDirectory>c:\dev\ABCApp\src\main\java</sourceDirectory>
        <scriptSourceDirectory>c:\dev\ABCApp\src\main\scripts</scriptSourceDirectory>
        <testSourceDirectory>c:\dev\ABCApp\src\test\java</testSourceDirectory>
        <outputDirectory>c:\dev\ABCApp\target\classes</outputDirectory>
        <testOutputDirectory>c:\dev\ABCApp\target\test-classes</testOutputDirectory>
        <resources>
          <resource>
            <directory>c:\dev\ABCApp\src\main\resources</directory>
          </resource>
        </resources>
        <testResources>
          <testResource>
            <directory>c:\dev\ABCApp\src\test\resources</directory>
          </testResource>
        </testResources>
        <directory>c:\dev\ABCApp\target</directory>
        <finalName>ABCApp</finalName>
        <pluginManagement>
          <plugins>
            <plugin>
              <artifactId>maven-antrun-plugin</artifactId>
              <version>1.3</version>
            </plugin>
            <plugin>
              <artifactId>maven-assembly-plugin</artifactId>
              <version>2.2-beta-5</version>
            </plugin>
            <plugin>
              <artifactId>maven-dependency-plugin</artifactId>
              <version>2.1</version>
            </plugin>
            <plugin>
              <artifactId>maven-release-plugin</artifactId>
              <version>2.0</version>
            </plugin>
          </plugins>
        </pluginManagement>
        <plugins>
          <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <executions>
              <execution>
                <id>default-testCompile</id>
                <phase>test-compile</phase>
                <goals>
                  <goal>testCompile</goal>
                </goals>
                <configuration>
                  <compilerArguments>
                    <bootclasspath>${settings.localRepository}/javax/javaee-endorsed-api/6.0/javaee-endorsed-api-6.0.jar;C:\Program Files\Java\jdk1.6.0_23\jre\lib\resources.jar;C:\Program Files\Java\jdk1.6.0_23\jre\lib\rt.jar;C:\Program Files\Java\jdk1.6.0_23\jre\lib\sunrsasign.jar;C:\Program Files\Java\jdk1.6.0_23\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.6.0_23\jre\lib\jce.jar;C:\Program Files\Java\jdk1.6.0_23\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.6.0_23\jre\lib\modules\jdk.boot.jar;C:\Program Files\Java\jdk1.6.0_23\jre\classes</bootclasspath>
                  </compilerArguments>
                  <source>1.6</source>
                  <target>1.6</target>
                  <failOnError>false</failOnError>
                </configuration>
              </execution>
              <execution>
                <id>default-compile</id>
                <phase>compile</phase>
                <goals>
                  <goal>compile</goal>
                </goals>
                <configuration>
                  <compilerArguments>
                    <bootclasspath>${settings.localRepository}/javax/javaee-endorsed-api/6.0/javaee-endorsed-api-6.0.jar;C:\Program Files\Java\jdk1.6.0_23\jre\lib\resources.jar;C:\Program Files\Java\jdk1.6.0_23\jre\lib\rt.jar;C:\Program Files\Java\jdk1.6.0_23\jre\lib\sunrsasign.jar;C:\Program Files\Java\jdk1.6.0_23\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.6.0_23\jre\lib\jce.jar;C:\Program Files\Java\jdk1.6.0_23\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.6.0_23\jre\lib\modules\jdk.boot.jar;C:\Program Files\Java\jdk1.6.0_23\jre\classes</bootclasspath>
                  </compilerArguments>
                  <source>1.6</source>
                  <target>1.6</target>
                  <failOnError>false</failOnError>
                </configuration>
              </execution>
            </executions>
            <dependencies>
              <dependency>
                <groupId>javax</groupId>
                <artifactId>javaee-endorsed-api</artifactId>
                <version>6.0</version>
                <scope>compile</scope>
              </dependency>
            </dependencies>
            <configuration>
              <compilerArguments>
                <bootclasspath>${settings.localRepository}/javax/javaee-endorsed-api/6.0/javaee-endorsed-api-6.0.jar;C:\Program Files\Java\jdk1.6.0_23\jre\lib\resources.jar;C:\Program Files\Java\jdk1.6.0_23\jre\lib\rt.jar;C:\Program Files\Java\jdk1.6.0_23\jre\lib\sunrsasign.jar;C:\Program Files\Java\jdk1.6.0_23\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.6.0_23\jre\lib\jce.jar;C:\Program Files\Java\jdk1.6.0_23\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.6.0_23\jre\lib\modules\jdk.boot.jar;C:\Program Files\Java\jdk1.6.0_23\jre\classes</bootclasspath>
              </compilerArguments>
              <source>1.6</source>
              <target>1.6</target>
              <failOnError>false</failOnError>
            </configuration>
          </plugin>
          <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.1.1</version>
            <executions>
              <execution>
                <id>default-war</id>
                <phase>package</phase>
                <goals>
                  <goal>war</goal>
                </goals>
                <configuration>
                  <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
              </execution>
            </executions>
            <configuration>
              <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
          </plugin>
          <plugin>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.3</version>
            <executions>
              <execution>
                <id>compile-protoc</id>
                <phase>generate-sources</phase>
                <goals>
                  <goal>run</goal>
                </goals>
                <configuration>
                  <tasks>
                    <mkdir dir="src/main/resources/protocolBuffers/compiled" />
                    <path id="proto.path">
                      <fileset dir="src/main/proto">
                        <include name="**/*.proto" />
                      </fileset>
                    </path>
                    <pathconvert pathsep=" " property="proto.files" refid="proto.path" />
                    <exec executable="src/main/resources/protocolBuffers/compiler/protoc" failonerror="true">
                      <arg value="--java_out=src/main/resources/" />
                      <arg value="-Ic:\dev\ABCApp/" />
                      <arg line="${proto.files}" />
                    </exec>
                  </tasks>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <artifactId>maven-clean-plugin</artifactId>
            <version>2.4.1</version>
            <executions>
              <execution>
                <id>default-clean</id>
                <phase>clean</phase>
                <goals>
                  <goal>clean</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <artifactId>maven-install-plugin</artifactId>
            <version>2.3.1</version>
            <executions>
              <execution>
                <id>default-install</id>
                <phase>install</phase>
                <goals>
                  <goal>install</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.4.3</version>
            <executions>
              <execution>
                <id>default-resources</id>
                <phase>process-resources</phase>
                <goals>
                  <goal>resources</goal>
                </goals>
              </execution>
              <execution>
                <id>default-testResources</id>
                <phase>process-test-resources</phase>
                <goals>
                  <goal>testResources</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.7.2</version>
            <executions>
              <execution>
                <id>default-test</id>
                <phase>test</phase>
                <goals>
                  <goal>test</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <artifactId>maven-deploy-plugin</artifactId>
            <version>2.5</version>
            <executions>
              <execution>
                <id>default-deploy</id>
                <phase>deploy</phase>
                <goals>
                  <goal>deploy</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <artifactId>maven-site-plugin</artifactId>
            <version>2.0.1</version>
            <executions>
              <execution>
                <id>default-site</id>
                <phase>site</phase>
                <goals>
                  <goal>site</goal>
                </goals>
                <configuration>
                  <outputDirectory>c:\dev\ABCApp\target\site</outputDirectory>
                  <reportPlugins>
                    <reportPlugin>
                      <groupId>org.apache.maven.plugins</groupId>
                      <artifactId>maven-project-info-reports-plugin</artifactId>
                    </reportPlugin>
                  </reportPlugins>
                </configuration>
              </execution>
              <execution>
                <id>default-deploy</id>
                <phase>site-deploy</phase>
                <goals>
                  <goal>deploy</goal>
                </goals>
                <configuration>
                  <outputDirectory>c:\dev\ABCApp\target\site</outputDirectory>
                  <reportPlugins>
                    <reportPlugin>
                      <groupId>org.apache.maven.plugins</groupId>
                      <artifactId>maven-project-info-reports-plugin</artifactId>
                    </reportPlugin>
                  </reportPlugins>
                </configuration>
              </execution>
            </executions>
            <configuration>
              <outputDirectory>c:\dev\ABCApp\target\site</outputDirectory>
              <reportPlugins>
                <reportPlugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-project-info-reports-plugin</artifactId>
                </reportPlugin>
              </reportPlugins>
            </configuration>
          </plugin>
        </plugins>
      </build>
      <reporting>
        <outputDirectory>c:\dev\ABCApp\target\site</outputDirectory>
      </reporting>
      <profiles>
        <profile>
          <id>endorsed</id>
          <activation>
            <property>
              <name>sun.boot.class.path</name>
            </property>
          </activation>
          <build>
            <plugins>
              <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <dependencies>
                  <dependency>
                    <groupId>javax</groupId>
                    <artifactId>javaee-endorsed-api</artifactId>
                    <version>6.0</version>
                  </dependency>
                </dependencies>
                <configuration>
                  <compilerArguments>
                    <bootclasspath>${settings.localRepository}/javax/javaee-endorsed-api/6.0/javaee-endorsed-api-6.0.jar;C:\Program Files\Java\jdk1.6.0_23\jre\lib\resources.jar;C:\Program Files\Java\jdk1.6.0_23\jre\lib\rt.jar;C:\Program Files\Java\jdk1.6.0_23\jre\lib\sunrsasign.jar;C:\Program Files\Java\jdk1.6.0_23\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.6.0_23\jre\lib\jce.jar;C:\Program Files\Java\jdk1.6.0_23\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.6.0_23\jre\lib\modules\jdk.boot.jar;C:\Program Files\Java\jdk1.6.0_23\jre\classes</bootclasspath>
                  </compilerArguments>
                </configuration>
              </plugin>
            </plugins>
          </build>
        </profile>
      </profiles>
    </project>
    
    • Luca Geretti
      Luca Geretti over 12 years
      I am missing a point related to your final paragraph: what is the path relative to the project root of such classes folder? And, you'd rather paste here the clean compile log, not the test one . A mvn clean compile -X output would be tops, if it is of manageable length.
    • Rajat Gupta
      Rajat Gupta over 12 years
      path of classes was src/main/webapp/WEB-INF/classes/. Inside this folder I placed some of the configuration files that were required for logging framework (logback). But since I moved these files somewhere else I simply deleted this directory. I dont operate mvn from command line but from the netbeans itself. The log printed above is generated when i perform clean & build.
    • Luca Geretti
      Luca Geretti over 12 years
      The information above is not sufficient to help you with your issue. You either need to include the pom.xml (better if you dump the Effective POM), and/or provide us with a more detailed trace as with mvn clean compile -X. Better the second one, if you say that some files do not make it to the /target folder.
    • Rajat Gupta
      Rajat Gupta over 12 years
      I tried putting here the clean compile output but that was too too big and thus I have put the effective POM . Let me know if any thing more is needed. should i put output of mvn compile ?
    • Luca Geretti
      Luca Geretti over 12 years
      I believe mvn clean compile would be a more useful output than the one you got from netbeans. I am not a netbeans user but it is very unlikely that the problem depends on that IDE. Anyway, you would verify it easily by checking the /target content after running the above command line.
    • Rajat Gupta
      Rajat Gupta over 12 years
      ohk.. i am trying to get mvn clean compile output. Yes I am looking at the /target only after running clean build & it was nt showing compiled classes from source packages. anyways I'll soon be back with mvn clean compile output
  • Rajat Gupta
    Rajat Gupta over 12 years
    yes Raghuram .. I have checked both folders but the compiled java classes are nowhere.
  • Rajat Gupta
    Rajat Gupta over 12 years
    Infact now I see that no java classes have been compiled
  • Raghuram
    Raghuram over 12 years
    @Marcos. I see "Compiling 81 source files to C:\dev\ABCApp\target\classes" in your log above. So something else is removing them before the build ends
  • Rajat Gupta
    Rajat Gupta over 12 years
    yes... and if you see in my pom.xml there is an plugin maven-antrun-plugin that is automating the compilation of .proto files for protocol buffers. Those files are getting copied to /classes folder.
  • Raghuram
    Raghuram over 12 years
    @Marcos. antrun is happening before compilation. Check the folders above after running mvn test to see if classes are retained. If not, try mvn compile. This will help isolate the problem
  • Rajat Gupta
    Rajat Gupta over 12 years
    in both the cases, java classes are not compiled & just the protocol buffers generated folder(by maven-antrun-plugin) is there