Я изучал выполнение файла с одним исходным кодом Java без какой-либо компиляции. Итак, я создал этот файл, и он работал отлично:
import com.google.gson.Gson;
import java.util.ArrayList;
import java.util.List;
public class J11SingleSource {
public static void main(String[] args) {
// Creating a list of hobbies
List<String> hobbies = new ArrayList<>();
hobbies.add("Reading");
hobbies.add("Swimming");
hobbies.add("Gardening");
// Creating a Person object
Person person = new Person("John", 30, hobbies);
// Serialize the Person object to JSON
Gson gson = new Gson();
String json = gson.toJson(person);
System.out.println("Serialized JSON: " + json);
// Deserialize JSON to a Person object
Person deserializedPerson = gson.fromJson(json, Person.class);
System.out.println("Deserialized Person: " + deserializedPerson.getName());
System.out.println("Deserialized Person's Age: " + deserializedPerson.getAge());
System.out.println("Deserialized Person's Hobbies: " + deserializedPerson.getHobbies());
}
static class Person {
private String name;
private int age;
private List<String> hobbies;
// Constructor, getters, and setters
public Person(String name, int age, List<String> hobbies) {
this.name = name;
this.age = age;
this.hobbies = hobbies;
}
// Getters and setters
...
}
}
И я запустил это так: java -cp lib/gson-2.8.8.jar J11SingleSource.java
И это дает мне ожидаемый результат:
Serialized JSON: {"name":"John","age":30,"hobbies":["Reading","Swimming","Gardening"]}
Deserialized Person: John
Deserialized Person's Age: 30
Deserialized Person's Hobbies: [Reading, Swimming, Gardening]
Но мне хотелось большего. Поэтому я разделил их на файлы:
Сначала я извлек класс Person
:
package tem.meaw.mua;
import com.google.gson.Gson;
import java.util.ArrayList;
import java.util.List;
public class Person {
private String name;
private int age;
private List<String> hobbies;
// Constructor, getters, and setters
public Person(String name, int age, List<String> hobbies) {
this.name = name;
this.age = age;
this.hobbies = hobbies;
}
// Getters and setters
...
}
И файл, содержащий основной класс:
package tem.meaw.mua;
import com.google.gson.Gson;
import java.util.ArrayList;
import java.util.List;
import tem.meaw.mua.Person;
public class Tem {
public static void main(String[] args) {
// Creating a list of hobbies
List<String> hobbies = new ArrayList<>();
hobbies.add("Reading");
hobbies.add("Swimming");
hobbies.add("Gardening");
// Creating a Person object
Person person = new Person("John", 30, hobbies);
// Serialize the Person object to JSON
Gson gson = new Gson();
String json = gson.toJson(person);
System.out.println("Serialized JSON: " + json);
// Deserialize JSON to a Person object
Person deserializedPerson = gson.fromJson(json, Person.class);
System.out.println("Deserialized Person: " + deserializedPerson.getName());
System.out.println("Deserialized Person's Age: " + deserializedPerson.getAge());
System.out.println("Deserialized Person's Hobbies: " + deserializedPerson.getHobbies());
}
}
И я пытаюсь запустить его так: java -cp lib/gson-2.8.8.jar Tem.java Person.java
Но он мне говорит следующее:
Tem.java:7: error: cannot find symbol
import tem.meaw.mua.Person;
^
symbol: class Person
location: package tem.meaw.mua
Tem.java:18: error: cannot find symbol
Person person = new Person("John", 30, hobbies);
...
Итак, в Java 11+ можно ли как-то объединить зависимые файлы в один файл без компиляции?
Кстати, «запускать... без компиляции» - НЕТ, вы не можете запускать файлы Java без компиляции. Код все еще компилируется (в память), даже если используется «Режим исходного файла для запуска программ с исходным кодом из одного файла».
Возможность запуска программы, состоящей из нескольких исходных файлов, без ее предварительной компиляции, была впервые добавлена в Java в версии 22.
Предыдущие версии Java (например, Java 11) поддерживают только один файл: JEP 330: запуск однофайловых программ с исходным кодом.
Если вы используете Java 22+, см. JEP 458: Запуск многофайловых программ с исходным кодом.