Maven编译错误:必须捕获或声明抛出未报告的异常

时间:2016-02-01 03:21:38

标签: maven thrift apache-storm

我在linux上编译风暴插件时遇到构建失败(虽然这段代码可以在Mac OS X上完美找到)。我搜索了多个来源,但似乎没有一个对我有用:

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 34.290s
[INFO] Finished at: Sun Jan 31 20:01:05 MST 2016
[INFO] Final Memory: 17M/224M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project advanced-stela: Compilation failure: Compilation failure:
[ERROR] /users/lexu/flintstone/advanced-stela/src/jvm/backtype/storm/scheduler/advancedstela/slo/Observer.java:[55,15] exception org.apache.thrift.transport.TTransportException is never thrown in body of corresponding try statement
[ERROR] /users/lexu/flintstone/advanced-stela/src/jvm/backtype/storm/scheduler/advancedstela/slo/Observer.java:[47,32] unreported exception org.apache.thrift7.transport.TTransportException; must be caught or declared to be thrown
[ERROR] -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project advanced-stela: Compilation failure
at     org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:213)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: org.apache.maven.plugin.compiler.CompilationFailureException: Compilation failure
at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:858)
at org.apache.maven.plugin.compiler.CompilerMojo.execute(CompilerMojo.java:129)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
... 19 more
[ERROR] 
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

我的maven配置是     Apache Maven 3.0.5 Maven home: /usr/share/maven Java version: 1.7.0_79, vendor: Oracle Corporation Java home: /usr/lib/jvm/java-7-openjdk-amd64/jre Default locale: en_US, platform encoding: UTF-8 OS name: "linux", version: "3.13.0-33-generic", arch: "amd64", family: "unix"

我的pom.xml依赖项

<dependencies>
    <dependency>
        <groupId>org.apache.storm</groupId>
        <artifactId>storm-core</artifactId>
        <version>${project.version}</version>
        <!-- keep storm out of the jar-with-dependencies -->
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.thrift</groupId>
        <artifactId>libthrift</artifactId>
        <version>0.9.2</version>
        <scope>compile</scope>
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
            </exclusion>
            <exclusion>
                <groupId>javax.servlet</groupId>
                <artifactId>servlet-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>commons-collections</groupId>
        <artifactId>commons-collections</artifactId>
        <version>3.2.1</version>
    </dependency>
    <dependency>
        <groupId>com.googlecode.json-simple</groupId>
        <artifactId>json-simple</artifactId>
        <version>1.1</version>
    </dependency>
</dependencies>
<build>
    <sourceDirectory>src/jvm</sourceDirectory>
    <resources>
        <resource>
            <directory>${basedir}/multilang</directory>
        </resource>
    </resources>

    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
        <!--
          Bind the maven-assembly-plugin to the package phase
          this will create a jar file without the storm dependencies
          suitable for deployment to a cluster.
         -->
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
                <archive>
                    <manifest>
                        <mainClass />
                    </manifest>
                </archive>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.2.1</version>
            <executions>
                <execution>
                    <goals>
                        <goal>exec</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <executable>java</executable>
                <includeProjectDependencies>true</includeProjectDependencies>
                <includePluginDependencies>false</includePluginDependencies>
                <classpathScope>compile</classpathScope>
                <mainClass>${storm.topology}</mainClass>
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.2</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <keepDependenciesWithProvidedScope>true</keepDependenciesWithProvidedScope>
                <promoteTransitiveDependencies>false</promoteTransitiveDependencies>
                <createDependencyReducedPom>true</createDependencyReducedPom>
                <minimizeJar>false</minimizeJar>
                <artifactSet>
                    <includes>
                        <include>org.apache.thrift:*</include>
                        <include>org.apache.storm:*</include>
                    </includes>
                </artifactSet>

                <relocations>
                    <relocation>
                        <pattern>org.apache.thrift</pattern>
                        <shadedPattern>org.apache.thrift7</shadedPattern>
                    </relocation>
                </relocations>
                <transformers>
                    <transformer implementation="org.apache.storm.maven.shade.clojure.ClojureTransformer" />
                </transformers>
                <filters>
                    <filter>
                        <artifact>org.apache.thrift:*</artifact>
                        <excludes>
                            <exclude>META-INF/LICENSE.txt</exclude>
                            <exclude>META-INF/NOTICE.txt</exclude>
                        </excludes>
                    </filter>
                </filters>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>org.apache.storm</groupId>
                    <artifactId>maven-shade-clojure-transformer</artifactId>
                    <version>${project.version}</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

在我看来,这似乎是一个节俭问题,但我似乎无法通过节俭找出问题。

以下是导致错误的代码:

public void run() {

    if (config != null) {
        try {
            nimbusClient = new NimbusClient(config, (String) config.get(Config.NIMBUS_HOST));
            topologies.constructTopologyGraphs();

            ......

        } catch (TTransportException e) {
            e.printStackTrace();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

来自http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

  

根据经验,插件使用此错误来表示构建失败,因为项目的依赖项或源代码存在问题,例如:编译或测试失败。

查看堆栈跟踪中的文本:

  

未报告的异常org.apache.thrift7.transport.TTransportException; 必须被抓住或宣布被抛出

您确定使用可生成“TTransportException”的对象/方法的代码的所有部分都有try-catch块和/或签名中“抛出TTransportException”吗?我认为这是问题所在。您使用的是什么静态代码分析器?

P.S。:对于非完美的英语,对于这句话的复杂翻译感到抱歉。如果您不明白,请提出问题。