mod coordinates;
mod manifest;
mod pom;
mod properties;
#[cfg(test)]
mod manifest_test;
#[cfg(test)]
mod pom_test;
#[cfg(test)]
mod properties_test;
#[cfg(test)]
mod scan_test;
use self::{manifest::parse_manifest_mf, pom::parse_pom_xml, properties::parse_pom_properties};
use super::PackageParser;
use crate::models::{DatasourceId, PackageData, PackageType};
use std::path::Path;
pub struct MavenParser;
impl PackageParser for MavenParser {
const PACKAGE_TYPE: PackageType = PackageType::Maven;
fn extract_packages(path: &Path) -> Vec<PackageData> {
if let Some(filename) = path.file_name().and_then(|name| name.to_str()) {
if filename == "pom.properties" {
return vec![parse_pom_properties(path)];
}
if filename == "MANIFEST.MF" {
return vec![parse_manifest_mf(path)];
}
}
parse_pom_xml(path)
}
fn is_match(path: &Path) -> bool {
if let Some(filename) = path.file_name().and_then(|name| name.to_str()) {
filename == "pom.xml"
|| filename.ends_with(".pom.xml")
|| filename.ends_with("-pom.xml")
|| filename.ends_with("_pom.xml")
|| filename == "pom.properties"
|| filename == "MANIFEST.MF"
|| filename.ends_with(".pom")
} else {
false
}
}
}
fn default_package_data(datasource_id: DatasourceId) -> PackageData {
PackageData {
package_type: Some(PackageType::Maven),
datasource_id: Some(datasource_id),
..Default::default()
}
}
crate::register_parser!(
"Apache Maven POM",
&[
"**/*.pom",
"**/pom.xml",
"**/pom.properties",
"**/META-INF/MANIFEST.MF"
],
"maven",
"Java",
Some("https://maven.apache.org/pom.html"),
);