1

我在eclipse下有一个maven GWT项目,因为我添加了一些服务器端依赖项,所以maven插件不再编译。以下是有关上下文的更多信息:

如果我不添加 GWT 以外的依赖项,GWT maven 插件的目标 gwt:compile 将成功完成:

<dependency>
    <groupId>com.google.gwt</groupId>
    <artifactId>gwt-servlet</artifactId>
    <version>${gwt.version}</version>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>com.google.gwt</groupId>
    <artifactId>gwt-user</artifactId>
    <version>${gwt.version}</version>
    <scope>provided</scope>
</dependency>

当我添加任何其他依赖项时,目标 gwt:compile 失败:

[INFO] establishing classpath list (scope = compile)
[ERROR] Exception in thread "main" java.lang.NoSuchMethodError: org.eclipse.jdt.internal.compiler.Compiler.<init>(Lorg/eclipse/jdt/internal/compiler/env/INameEnvironment;Lorg/eclipse/jdt/internal/compiler/IErrorHandlingPolicy;Lorg/eclipse/jdt/internal/compiler/impl/CompilerOptions;Lorg/eclipse/jdt/internal/compiler/ICompilerRequestor;Lorg/eclipse/jdt/internal/compiler/IProblemFactory;)V
[ERROR]     at com.google.gwt.dev.javac.JdtCompiler$CompilerImpl.<init>(JdtCompiler.java:93)
[ERROR]     at com.google.gwt.dev.javac.JdtCompiler.<init>(JdtCompiler.java:231)
[ERROR]     at com.google.gwt.dev.javac.JdtCompiler.compile(JdtCompiler.java:193)
[ERROR]     at com.google.gwt.dev.javac.CompilationState.compile(CompilationState.java:115)
[ERROR]     at com.google.gwt.dev.GWTCompiler.distill(GWTCompiler.java:327)
[ERROR]     at com.google.gwt.dev.GWTCompiler.run(GWTCompiler.java:564)
[ERROR]     at com.google.gwt.dev.GWTCompiler.run(GWTCompiler.java:554)
[ERROR]     at com.google.gwt.dev.GWTCompiler.main(GWTCompiler.java:214)

我确实在 gwt:compile (http://mojo.codehaus.org/gwt-maven-plugin-1.2/compile-mojo.html) 中搜索了有关类路径/依赖项的配置参数,但没有成功。

我想与 GWT 一起使用服务器端依赖项,告诉 GWT 插件不要考虑非 GWT 依赖项。


工作 pom (gwt:compile 成功完成):

<?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>mygroupid</groupId>
    <artifactId>projectname</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>project name</name>

    <organization>
        <name>My company</name>
        <url>my company url</url>
    </organization>

    <properties>
        <gwt.version>1.5.3</gwt.version>
    </properties>

    <build>
        <finalName>final name</finalName>

        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.5</source>
                    <target>1.5</target>
                    <encoding>UTF-8</encoding>
                </configuration>
                <version>2.5.1</version>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-eclipse-plugin</artifactId>
                <configuration>
                    <ajdtVersion>none</ajdtVersion>
                </configuration>
                <version>2.9</version>
            </plugin>

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>gwt-maven-plugin</artifactId>
                <version>1.2</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <runTarget>org.mycompany.myproject.Main/welcomeGWT.html</runTarget>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <warSourceDirectory>war</warSourceDirectory>
                    <webXml>src/main/webapp/WEB-INF/web.xml</webXml>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <!-- GWT -->
        <dependency>
            <groupId>com.google.gwt</groupId>
            <artifactId>gwt-servlet</artifactId>
            <version>${gwt.version}</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.google.gwt</groupId>
            <artifactId>gwt-user</artifactId>
            <version>${gwt.version}</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</project>

不工作的pom(gwt:编译抛出异常):

 <?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>mygroupid</groupId>
    <artifactId>projectname</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>project name</name>

    <organization>
        <name>My company</name>
        <url>my company url</url>
    </organization>

    <properties>
        <gwt.version>1.5.3</gwt.version>
    </properties>

    <build>
        <finalName>final name</finalName>

        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.5</source>
                    <target>1.5</target>
                    <encoding>UTF-8</encoding>
                </configuration>
                <version>2.5.1</version>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-eclipse-plugin</artifactId>
                <configuration>
                    <ajdtVersion>none</ajdtVersion>
                </configuration>
                <version>2.9</version>
            </plugin>

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>gwt-maven-plugin</artifactId>
                <version>1.2</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <runTarget>org.mycompany.myproject.Main/welcomeGWT.html</runTarget>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <warSourceDirectory>war</warSourceDirectory>
                    <webXml>src/main/webapp/WEB-INF/web.xml</webXml>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>org.apache.ibatis</groupId>
            <artifactId>ibatis-sqlmap</artifactId>
            <version>2.3.4.726</version>
        </dependency>
        <dependency>
            <groupId>net.sf.jasperreports</groupId>
            <artifactId>jasperreports</artifactId>
            <version>3.6.0</version>
        </dependency>



        <!-- GWT -->
        <dependency>
            <groupId>com.google.gwt</groupId>
            <artifactId>gwt-servlet</artifactId>
            <version>${gwt.version}</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.google.gwt</groupId>
            <artifactId>gwt-user</artifactId>
            <version>${gwt.version}</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
 </project>
4

2 回答 2

1

您在我们的项目中使用 JasperReport 吗?我记得在使用 JasperReport 和 GWT 时遇到了问题。JasperReport 包含与 org.eclipse.jdt.internal.compiler.CompilerGWT 预期不同的版本。

我认为您可以通过简单地更改类路径的顺序来解决此问题(已在评论中建议)。如果这没有帮助,请尝试更新您的 GWT 版本。或者尝试查找 JasperReport 的版本,其中包含org.eclipse.jdt.internal.compiler.Compile与 GWT 一起使用的类的版本。

于 2012-07-06T12:19:53.003 回答
0

在部署我们的 Web 应用程序期间,我在 QA Linux环境中遇到了类似的错误,我们设法修复了它。当我部署到本地Windows 10Linux Ubuntu虚拟机中时,甚至不存在这个问题。我的环境配置如下

  1. Ubuntu 16.04 LTS
  2. 阿帕奇 Maven 3.3.3
  3. Apache Tomcat/8.0.32 (Ubuntu)
  4. JVM 1.8.0_91-8u91-b14-0ubuntu4~16.04.1-b14

问题是因为在两个不同的 jar 文件中发现了两个 eclipse Compiler 类,这会在 tomcat 部署期间在类路径中产生冲突。罪魁祸首是文件 ecj.jar 和 jdtcore.jar

我原来的 pom.xml 片段如下

    <dependency>
        <groupId>org.drools</groupId>
        <artifactId>drools-compiler</artifactId>
        <version>6.3.0.Final</version>
    </dependency>       
    <dependency>
        <groupId>net.sourceforge.dynamicreports</groupId>
        <artifactId>dynamicreports-core</artifactId>
        <version>3.1.3</version>
    </dependency>
  1. drools-compiler的Maven依赖树引入了 ecj.jar 文件。
  2. 具有 jasperreports.jar 的 dynamicreports-core.jar 文件的Maven依赖项又引入了 jdtcore.jar 文件。

解决方案:

我们升级了引入 jasperreports.jar 文件的 dynamicreports-core 版本。

注意:我在阅读http://www.cnblogs.com/xiaoMzjm/p/4566672.html 后能够解决这个问题。归功于这位博主。

    <dependency>
        <groupId>net.sourceforge.dynamicreports</groupId>
        <artifactId>dynamicreports-core</artifactId>
        <version>4.1.0</version>
    </dependency>   
于 2016-06-03T19:33:18.457 回答