簡體   English   中英

在maven clean build的單元測試中使用生成的代碼?

[英]Using generated code in unit tests with maven clean build?

我有一個使用JAXWS插件的maven項目,使用wsimport基於WSDL生成一些代碼。 如果我運行mvn generate-sources,則生成此代碼。

另外,我有引用生成的類的JUnit單元測試。

根據默認安裝上的文檔 ,測試應該在generate-sources之后運行,因此它應該可以工作。 但是,如果我在eclipse中的干凈工作區上運行構建,我會為其中一個生成的類獲取NoClassDefFound。 如果你再次運行安裝它的工作原理。

這有點奇怪,所以我退出了eclipse並回到了命令行的基礎知識。 如果我執行此序列,則會收到NoClassDefFound錯誤:

  1. mvn干凈
  2. mvn安裝

但是,如果我執行以下操作,則無錯誤地運行:

  1. mvn干凈
  2. mvn clean install

怎么會這樣? 我原以為mvn clean install會相當於mvn clean + mvn install嗎?

此外,當它出錯時,我可以在控制台輸出中看到代碼生成階段在進行測試之前實際運行了。 班級在那里,但是類加載器顯然看不到它。

我在控制台輸出中沒有看到任何其他錯誤。 關於指定插件版本號和源文件的一些警告是在cp1252中編碼的。 沒什么好激動的。

我確實讀過這個問題,但它沒有幫助我。 我正在使用Java 8 jdk所以我想知道這里是否有錯誤。

編輯

在這種情況下,我不確定代碼是否有用,因為如果沒有完整的代碼庫,就無法運行測試版本。 但是,它可能有助於查看pom和構建步驟的復雜性,因此這里是一個經過編輯的版本。 我剛剛重命名了一些東西,使它更匿名,但在功能上它是相同的。

希望它有助於解決所提出的問題。

<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>com.company</groupId>
    <artifactId>MyApp</artifactId>
     <version>1.0.0</version>
    <packaging>war</packaging>

    <name>MyApp</name>

    <properties>
        <java-version>1.6</java-version>
        <spring-version>4.1.4.RELEASE</spring-version>
        <hibernate-version>4.3.7.Final</hibernate-version>
        <org.slf4j-version>1.6.6</org.slf4j-version>
    </properties>

    <dependencies>  

        <!-- JAXWS web services -->
        <dependency>
            <groupId>com.sun.xml.ws</groupId>
            <artifactId>jaxws-rt</artifactId>
            <version>2.2.7</version>
        </dependency>

        <!-- Spring DI -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring-version}</version>
            <exclusions>
              <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
              </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring-version}</version>
        </dependency>   
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${spring-version}</version>
        </dependency>

        <!-- Spring integration with JAX-WS -->     
        <dependency>
            <groupId>org.jvnet.jax-ws-commons.spring</groupId>
            <artifactId>jaxws-spring</artifactId>
            <version>1.8</version>  
            <exclusions>
              <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring</artifactId>
              </exclusion>
            </exclusions>           
        </dependency>

        <!-- JPA Provider (Hibernate) -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>${hibernate-version}</version>
        </dependency>       

        <!-- DataSource (HikariCP) -->
        <dependency>
            <groupId>com.zaxxer</groupId>
            <artifactId>HikariCP-java6</artifactId>
            <version>2.3.2</version>
        </dependency>

        <!-- AS400 access -->
        <dependency>
            <groupId>net.sf.jt400</groupId>
            <artifactId>jt400</artifactId>
            <version>6.7</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.17</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>               

        <!-- Servlet - provided by container -->
        <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>com.sun.xml.parsers</groupId>
            <artifactId>jaxp-ri</artifactId>
            <version>1.4.5</version>
        </dependency>

        <!-- Test -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>     
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring-version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-all</artifactId>
            <version>1.9.5</version>
            <scope>test</scope>
        </dependency>   
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-eclipse-plugin</artifactId>
                <version>2.9</version>
                <configuration>
                    <additionalProjectnatures>
                        <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
                    </additionalProjectnatures>
                    <additionalBuildcommands>
                        <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
                    </additionalBuildcommands>
                    <downloadSources>true</downloadSources>
                    <downloadJavadocs>true</downloadJavadocs>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5.1</version>
                <configuration>
                    <source>${java-version}</source>
                    <target>${java-version}</target>
                    <compilerArguments>
                  <endorseddirs>${project.build.directory}/endorsed</endorseddirs>               
                    </compilerArguments>
                    <showWarnings>true</showWarnings>
                    <showDeprecation>true</showDeprecation>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <configuration>
                    <mainClass>org.test.int1.Main</mainClass>
                </configuration>
            </plugin>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-dependency-plugin</artifactId>
              <version>2.3</version>
              <executions>
                <execution>
                  <phase>validate</phase>
                  <goals>
                    <goal>copy</goal>
                  </goals>
                  <configuration>
                    <outputDirectory>${project.build.directory}/endorsed</outputDirectory>
                    <silent>true</silent>
                    <artifactItems>
                      <artifactItem>
                        <groupId>javax.xml.bind</groupId>
                        <artifactId>jaxb-api</artifactId>
                        <version>2.2.4</version>
                        <type>jar</type>
                      </artifactItem>
                      <artifactItem>
                        <groupId>javax.xml.ws</groupId>
                        <artifactId>jaxws-api</artifactId>
                        <version>2.2.8</version>
                        <type>jar</type>
                      </artifactItem>
                      <artifactItem>
                        <groupId>javax.xml.bind</groupId>
                        <artifactId>jaxb-api</artifactId>
                        <version>2.2.4</version>
                        <type>jar</type>
                      </artifactItem>
                    </artifactItems>
                  </configuration>
                </execution>
              </executions>
            </plugin>
            <plugin>
              <groupId>org.jvnet.jax-ws-commons</groupId>
              <artifactId>jaxws-maven-plugin</artifactId>
              <version>2.2</version>
              <executions>
                <execution>
                  <goals>
                    <goal>wsimport</goal>
                  </goals>
                </execution>
              </executions>
              <configuration>
              <!-- Configuration for generating the jaxws code -->
                <wsdlDirectory>${basedir}/src/main/resources/wsdl</wsdlDirectory>
                <wsdlLocation>wsdl/mywsdl.wsdl</wsdlLocation>
                <packageName>com.company.generated</packageName>
                <keep>true</keep>
                <sourceDestDir>${basedir}/target/generated-sources/src/main/java</sourceDestDir> 
              </configuration>
            </plugin>           
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-source-plugin</artifactId>
              <executions>
                <execution>
                  <id>attach-sources</id>
                  <goals>
                    <goal>jar</goal>
                  </goals>
                </execution>
              </executions>
            </plugin>            
        </plugins>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <excludes>
                    <!-- Exclude these files from the build -->
                    <exclude>**/log4j.xml</exclude>
                </excludes>
            </resource>
        </resources>
    </build>
</project>

我將target / generated-sources文件夾配置為您正在使用的IDE中的源文件夾。 這可能有所幫助。

我一直在重新審視這個項目,並再看一下這個問題。 我經歷了pom並仔細檢查了所有可以修剪或更新的東西。 在這個過程中,我發現了以下插件。

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.2.1</version>
    <configuration>
        <mainClass>org.test.int1.Main</mainClass>
    </configuration>
</plugin>

我認為當我們剛剛開始使用maven時,必須從某個例子中復制出來。 該插件是在構建期間執行Java程序,我不需要它,並且主類不存在。 我沒有得到任何關於此的構建警告。

刪除該插件解決了問題。 這修復了它在命令行上,對於Eclipse,我還必須右鍵單擊項目並選擇Maven,然后選擇Update project。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM