Fix Java project structure.
This commit is contained in:
@@ -1,6 +1,12 @@
|
|||||||
|
package main;
|
||||||
|
|
||||||
public class Main {
|
public class Main {
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
System.out.println("Hello, world!");
|
System.out.println("Hello, world!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static int add(int a, int b) {
|
||||||
|
return a + b;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
12
assets/src/test/Main.java
Normal file
12
assets/src/test/Main.java
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
package test;
|
||||||
|
|
||||||
|
public class Main {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
testAdd();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void testAdd() {
|
||||||
|
assert main.Main.add(2, 2) == 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -10,7 +10,12 @@ pub fn expand_files<P: AsRef<Path>>(path: P) -> anyhow::Result<Vec<PathBuf>> {
|
|||||||
Ok(std::fs::read_dir(path)?
|
Ok(std::fs::read_dir(path)?
|
||||||
.filter_map(|entry| {
|
.filter_map(|entry| {
|
||||||
let path = entry.ok()?.path();
|
let path = entry.ok()?.path();
|
||||||
if path.is_file() { Some(path) } else { None }
|
if path.is_dir() {
|
||||||
|
Some(expand_files(path).ok()?)
|
||||||
|
} else {
|
||||||
|
Some(vec![path])
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
.flatten()
|
||||||
.collect())
|
.collect())
|
||||||
}
|
}
|
||||||
|
|||||||
43
src/main.rs
43
src/main.rs
@@ -18,8 +18,14 @@ use anyhow::Context;
|
|||||||
use bytesize::ByteSize;
|
use bytesize::ByteSize;
|
||||||
|
|
||||||
const DIR_TARGET: LazyLock<PathBuf> = LazyLock::new(|| PathBuf::from("target/"));
|
const DIR_TARGET: LazyLock<PathBuf> = LazyLock::new(|| PathBuf::from("target/"));
|
||||||
const DIR_TEST: LazyLock<PathBuf> = LazyLock::new(|| PathBuf::from("test/"));
|
|
||||||
const DIR_SRC: LazyLock<PathBuf> = LazyLock::new(|| PathBuf::from("src/"));
|
const DIR_SRC: LazyLock<PathBuf> = LazyLock::new(|| PathBuf::from("src/"));
|
||||||
|
/// Cannot flatten this dir out of existence due to IDEs, Linters,
|
||||||
|
/// and probably also Java expecting it to exist.
|
||||||
|
const DIR_MAIN: LazyLock<PathBuf> = LazyLock::new(|| DIR_SRC.join("main/"));
|
||||||
|
/// Once again, I would love to pull this out of src/ and into parent, but
|
||||||
|
/// I can't do that due to IDEs, linters, and probably also Java expecting it to exist in src/.
|
||||||
|
const DIR_TEST: LazyLock<PathBuf> = LazyLock::new(|| DIR_SRC.join("test/"));
|
||||||
|
|
||||||
const F_NEST_TOML: LazyLock<PathBuf> = LazyLock::new(|| PathBuf::from("Nest.toml"));
|
const F_NEST_TOML: LazyLock<PathBuf> = LazyLock::new(|| PathBuf::from("Nest.toml"));
|
||||||
const F_NEST_LOCK: LazyLock<PathBuf> = LazyLock::new(|| PathBuf::from("Nest.lock"));
|
const F_NEST_LOCK: LazyLock<PathBuf> = LazyLock::new(|| PathBuf::from("Nest.lock"));
|
||||||
|
|
||||||
@@ -77,8 +83,8 @@ fn init() -> anyhow::Result<()> {
|
|||||||
.to_owned();
|
.to_owned();
|
||||||
|
|
||||||
// Make src, target, tests
|
// Make src, target, tests
|
||||||
for dir in [DIR_SRC, DIR_TARGET, DIR_TEST] {
|
for dir in [DIR_SRC, DIR_MAIN, DIR_TARGET, DIR_TEST] {
|
||||||
std::fs::create_dir(dir.clone())?;
|
std::fs::create_dir_all(dir.clone())?;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make config file.
|
// Make config file.
|
||||||
@@ -114,13 +120,24 @@ fn init() -> anyhow::Result<()> {
|
|||||||
)?;
|
)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make Main.java
|
// Make src/main/Main.java
|
||||||
if let Result::Ok(mut f) = OpenOptions::new()
|
if let Result::Ok(mut f) = OpenOptions::new().write(true).create_new(is_empty).open(
|
||||||
.write(true)
|
DIR_MAIN
|
||||||
.create_new(is_empty)
|
.clone()
|
||||||
.open(DIR_SRC.clone().join("Main").with_extension(JAVA_EXT_SOURCE))
|
.join("Main")
|
||||||
{
|
.with_extension(JAVA_EXT_SOURCE),
|
||||||
f.write_all(include_bytes!("../assets/Main.java"))?;
|
) {
|
||||||
|
f.write_all(include_bytes!("../assets/src/main/Main.java"))?;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make src/test/Main.java
|
||||||
|
if let Result::Ok(mut f) = OpenOptions::new().write(true).create_new(is_empty).open(
|
||||||
|
DIR_TEST
|
||||||
|
.clone()
|
||||||
|
.join("Main")
|
||||||
|
.with_extension(JAVA_EXT_SOURCE),
|
||||||
|
) {
|
||||||
|
f.write_all(include_bytes!("../assets/src/test/Main.java"))?;
|
||||||
}
|
}
|
||||||
|
|
||||||
// git init .
|
// git init .
|
||||||
@@ -133,7 +150,6 @@ fn init() -> anyhow::Result<()> {
|
|||||||
.read(true)
|
.read(true)
|
||||||
.open(".gitignore")
|
.open(".gitignore")
|
||||||
{
|
{
|
||||||
dbg!();
|
|
||||||
let mut buf = String::new();
|
let mut buf = String::new();
|
||||||
f.read_to_string(&mut buf)?;
|
f.read_to_string(&mut buf)?;
|
||||||
|
|
||||||
@@ -141,7 +157,7 @@ fn init() -> anyhow::Result<()> {
|
|||||||
DIR_TARGET.as_path().display().to_string(),
|
DIR_TARGET.as_path().display().to_string(),
|
||||||
format!("*.{}", JAVA_EXT_CLASS),
|
format!("*.{}", JAVA_EXT_CLASS),
|
||||||
] {
|
] {
|
||||||
if dbg!(!buf.contains(&ignored)) {
|
if !buf.contains(&ignored) {
|
||||||
f.write(format!("{}\n", ignored).as_bytes())?;
|
f.write(format!("{}\n", ignored).as_bytes())?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -192,7 +208,7 @@ fn build() -> anyhow::Result<()> {
|
|||||||
|
|
||||||
for target in targets {
|
for target in targets {
|
||||||
println!("Compiling {}", target.display());
|
println!("Compiling {}", target.display());
|
||||||
if javac.clone().compile(target.as_path()).is_ok()
|
if javac.clone().compile(dbg!(target.as_path())).is_ok()
|
||||||
&& let Result::Ok(class) = Class::try_from(target.clone())
|
&& let Result::Ok(class) = Class::try_from(target.clone())
|
||||||
{
|
{
|
||||||
nest_lock.0.insert(target, class);
|
nest_lock.0.insert(target, class);
|
||||||
@@ -212,6 +228,7 @@ fn run<P: AsRef<Path>>(
|
|||||||
entry_point: P,
|
entry_point: P,
|
||||||
assertions: bool,
|
assertions: bool,
|
||||||
) -> anyhow::Result<(Option<String>, Option<String>)> {
|
) -> anyhow::Result<(Option<String>, Option<String>)> {
|
||||||
|
// JRE pathing will be messed up without this.
|
||||||
crate::env::set_cwd(DIR_TARGET.as_path())?;
|
crate::env::set_cwd(DIR_TARGET.as_path())?;
|
||||||
|
|
||||||
java::JVMBuilder::new()
|
java::JVMBuilder::new()
|
||||||
|
|||||||
Reference in New Issue
Block a user