【问题标题】:Can I force Maven to package a jar despite compilation errors?尽管编译错误,我可以强制 Maven 打包一个 jar 吗?
【发布时间】:2015-08-02 22:51:45
【问题描述】:

所以我运行 maven package 将我的依赖项构建到一个 jar 中。但是,我需要 Maven 忽略任何编译错误并打包 jar。

这将如何实现?我的pom.xml如下:

<?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/xsd/maven-4.0.0.xsd">

    <!-- Project specific stuff would be here... -->

    <build>
        <sourceDirectory>wherever</sourceDirectory>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>com.googlecode.json-simple</groupId>
            <artifactId>json-simple</artifactId>
            <version>1.1.1</version>
        </dependency>

        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>

        <!-- etc... -->
    </dependencies>

    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
</project>

通过 SO 搜索仅向我展示了如何忽略单元测试中的编译错误。尽管代码中有任何错误,我只是希望我的包能够被编译。


编辑:人们似乎在抨击我。我已经做Java 5 年了。我知道你不应该编译错误。我知道这意味着什么。

我的老板和我一起编程。他特别说,“我可以在 Eclipse 中编译错误,所以在 Maven 中编译错误。”这不是因为我无知,也不是因为我拒绝接受自己的错误。因为那是我被特别要求做的事情。我没有问这个问题,因为我不称职,正如你们许多人所想的那样。

你恨我,只要知道你这样做是不公平的。

【问题讨论】:

  • 这是一个真的坏主意。您希望您的应用程序在(可能)随机缺少类的情况下如何运行?
  • 我没有。然而,就像 StackOverflow 上的许多其他人一样,我被告知我必须为我的工作做些什么。有时这意味着做错事。我试图说服我的老板这是一个可怕的想法。不过,他不会让步。如果不可能,那就这样吧。
  • 如果你的代码不能编译,那么就没有什么要打包的...
  • (未经测试):Eclipse 编译器可以 1)将编译错误视为非致命错误(生成引发异常的代码,仅此而已)和 2)被 Maven 用作 java 编译器。见gabiaxel.com/2011/10/replacing-javac-with-eclipse-compiler.html 和help.eclipse.org/juno/…
  • 听起来你需要一份新工作

标签: java maven


【解决方案1】:

建立在@wings 答案之上

您也可以在 pom 中使用标志 failOnError=false

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <failOnError>false</failOnError>
    </configuration>
</plugin>

或通过命令行

mvn package -Dmaven.compiler.failOnError=false

【讨论】:

    【解决方案2】:

    也许这就是你想要的: https://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html#failOnError

    设置failOnError=false 忽略编译错误。

    【讨论】:

      【解决方案3】:

      使用the exclude option to the compiler plugin 排除有编译错误的类。

      【讨论】:

        【解决方案4】:

        当你运行 maven 包时。这意味着 Maven 将在“打包”阶段之前运行所有阶段。因此 maven compile 肯定会被触发。并且由于编译错误,maven 会在“编译”阶段停止。

        即使出现编译错误,也可以打包您的项目。我认为您应该只使用“maven 程序集插件”来打包您的依赖项,并且该插件的阶段应该在“编译”之前。例如:“流程资源”或“流程资源”。

        这样,在 maven 编译您的项目的源代码之前,您将拥有一个包含所有依赖项的包。当然,maven 会再次停留在“编译”阶段。但你已经拥有了你想要的。

        希望对您有所帮助。

        【讨论】:

          【解决方案5】:

          如果只是关于依赖关系,则有 dependency:copy-dependencies:

          将项目依赖项从存储库复制到定义位置的目标。

          使用 assembly:single 和 user-defined descriptor 从上面定义的位置创建具有依赖关系的 JAR:

          从组装描述符组装应用程序包或分发。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-05-30
            • 2013-02-19
            • 2015-03-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多