从Java 9到Java 8的兼容性和迁移

时间:2017-05-12 07:41:39

标签: java java-9

我正在阅读有关新Java 9模块系统的document

段落 3兼容性&迁移解释了如何迁移代码 从Java 8到Java 9,但没有说明如何"迁移"或运行一个应用程序 用Java 9编写的Java 9运行时之前。

所以,如果我有,比如一个用模块化方式编写的JAR应用程序(每个模块都有一个模块描述符),如果我将它部署在JDK 8运行时会发生什么呢? / p>

3 个答案:

答案 0 :(得分:8)

如果您的类文件使用module-info.class标志进行编译,那么它们应该在Java 8上正常运行。module-info.java文件将被旧JVM忽略。

如果您的Java 8项目是基于maven的,则可以轻松配置它以包含 final Calendar myCalendar = Calendar.getInstance(); final DatePickerDialog.OnDateSetListener date = new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { // TODO Auto-generated method stub myCalendar.set(Calendar.YEAR, year); myCalendar.set(Calendar.MONTH, monthOfYear); myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth); String myFormat = "MM/dd/yy"; //In which you need put here SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US); eventDate.setText(sdf.format(myCalendar.getTime())); CityText.setTextColor(Color.WHITE); InputMethodManager imm = (InputMethodManager) getApplicationContext().getSystemService(Main2Activity.context.INPUT_METHOD_SERVICE); if (imm.isAcceptingText()) { //If keyboard is VISIBLE then Hide it imm.hideSoftInputFromWindow(getActivity().getCurrentFocus().getWindowToken(), 0); } } }; assert eventDateParent != null; eventDateParent.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { DatePickerDialog dpd = new DatePickerDialog(Main2Activity.context, date, myCalendar .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH)); SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); Date d = null; try { d = sdf.parse(String.valueOf(sdf.format(new Date()))); } catch (ParseException e) { e.printStackTrace(); } dpd.getDatePicker().setMinDate(d.getTime()); dpd.show(); } }); https://maven.apache.org/plugins/maven-compiler-plugin/examples/module-info.html

另外,请查看JEP 238(多版本JAR文件)。这使您可以在不破坏与Java 8的兼容性的情况下获得Java 9功能的更多优势。

答案 1 :(得分:5)

您无法使用小于其构建的JRE来启动Java应用程序。

如果您只使用javac而没有任何特殊选项,它将生成在JRE上运行的类等于或大于使用过的JDK的类。

然而,javac支持交叉编译。您可以使用JDK 8编译JDK 6兼容的类文件。在javac docs

中搜索交叉编译选项

答案 2 :(得分:0)

Java类文件包含版本信息。与任何Java版本一样,不应该执行使用比运行时更新的主要版本编译的类文件(或jar)。请参阅:https://stackoverflow.com/a/4692743/6239524