当前位置: 首页 > 知识库问答 >
问题:

用Maven编译和执行JDK预览功能

颛孙沈义
2023-03-14

在JDK/12 EarlyAccess Build10中,JEP-325开关表达式已经作为预览特性集成在JDK中。表达式的示例代码(在JEP中也是如此):

Scanner scanner = new Scanner(System.in);
Day day = Day.valueOf(scanner.next());
switch (day) {
    case MONDAY, TUESDAY -> System.out.println("Back to work.") ;
    case WEDNESDAY -> System.out.println("Wait for the end of week...") ;
    case THURSDAY,FRIDAY -> System.out.println("Plan for the weekend?");
    case SATURDAY, SUNDAY -> System.out.println("Enjoy the holiday!");
}

其中day作为枚举

public enum Day {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

共有1个答案

祁飞扬
2023-03-14

可以使用以下maven配置,使用--enable-preview以及--release12+(例如,131415)参数来编译代码。

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.0</version>
            <configuration>
                <release>12</release> <!-- <release>13/14/15</release> -->
                <compilerArgs>--enable-preview</compilerArgs>
            </configuration>
        </plugin>
        <!-- This is just to make sure the class is set as main class to execute from the jar-->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.1.0</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <transformers>
                            <transformer
                                    implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                            <transformer
                                    implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>edu.forty.bits.expression.SwitchExpressions</mainClass>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

注意:-我还必须在MacOS上确保我的~/.mavenrc文件被配置为将Java13标记为Maven配置的默认java。

执行maven命令从模块类构建jar

mvn clean verify 
java --enable-preview -jar target/forty-bits-of-java-1.0.0-SNAPSHOT.jar

最后一个参数是到Maven构建的jar的路径。

这将产生预期的输出:

(截图来自之前的一次执行。)

GitHub上的来源

<compilerArgs>
    <arg>--enable-preview</arg>
</compilerArgs>

原因是,如果您指定了两个不同的参数,它在配置验证期间不会失败,并且稍后找到的参数会推翻有效配置:

<compilerArgs>--enable-preview</compilerArgs>
<compilerArgs>-Xlint:all</compilerArgs>
 类似资料:
  • 我一定是个反Maven的人,因为每次我尝试使用它时,我都会花很多时间挣扎,然后就放弃了。我的最新情况是,我不能编译Java7源代码,尽管有1.7的JDK。 以下是的输出。有趣的是,当我使用Maven 3.0.4时,错误消息是而不是使用Maven 3.2.1的 正如您所看到的,我使用的是Maven的最新版本,Maven使用的是Java1.7。 我认为脚本正在添加,因为我的环境变量没有指定它。 我正在

  • 我看到了很多基于maven pom.xml构建文件的spring项目。还有一件奇怪的事情:在没有公共静态void main()方法的情况下构建项目。例如:https://github.com/geowarin/spring-mvc-security。在Spring.io的常用示例中,有一些类带有@SpringBootApplication注释和SpringApplication.Run(appli

  • Handlebars.compile(template, options) 编译一个模版以立即运行。 const template = Handlebars.compile("{{foo}}"); template({}); 支持多种选项以更改模版的执行方式。 data: 设置为 false 以终止 @data 跟踪。 compat: 设置为 true 以允许递归领域查找。 knownHelpe

  • 3.3 编译和执行源码 导入成功之后,应该就没有编译错误了!此时你可以运行一下webmagic-core项目中自带的exmaple:"us.codecraft.webmagic.processor.example.GithubRepoPageProcessor"。 同样,看到控制台输出如下,则表示源码编译和执行成功了!

  • 我正在用Java编写一个程序,并且使用JavaFX作为GUI。直到今天,我一直在使用javafx独立编写代码,所有的事情都运行得很顺利。我已经决定开始使用maven,现在项目不编译,也不运行或执行。 这是我的主要课程: 我在其他项目中使用过maven,但从未使用过JavaFX。我该怎么办?

  • 我正在与Maven一起构建一个GWT项目。我为gwt编译添加了gwt maven插件,如下所示: 我在executions标签下包含了编译目标,希望在编译阶段执行GWT编译。但GWT编译仅在包阶段或运行mvn package命令时执行 即使为gwt-dev依赖项设置了提供的作用域,我也会收到如下所示的警告。 1) 为什么在编译阶段不执行GWT编译 2)我应该为GWT(GWT用户、GWT开发人员)依