我正在阅读有关新Java 9模块系统的document。
段落 3兼容性&迁移解释了如何迁移代码 从Java 8到Java 9,但没有说明如何"迁移"或运行一个应用程序 用Java 9编写的Java 9运行时之前。
所以,如果我有,比如一个用模块化方式编写的JAR应用程序(每个模块都有一个模块描述符),如果我将它部署在JDK 8运行时会发生什么呢? / p>
答案 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