switch from Java EE to Jakarta EE

This commit is contained in:
2022-11-15 20:07:36 +08:00
parent 9b94bffff0
commit d9bf885b2d
27 changed files with 210 additions and 180 deletions

View File

@@ -1,6 +1,6 @@
plugins {
id 'net.woggioni.gradle.lombok' apply false
id 'net.woggioni.gradle.wildfly'
alias(catalog.plugins.lombok) apply false
alias(catalog.plugins.wildfly)
id 'war'
id 'maven-publish'
}
@@ -33,7 +33,7 @@ allprojects {
}
tasks.withType(JavaCompile) {
options.release = 11
options.release = 17
}
tasks.withType(Test) {
@@ -44,46 +44,35 @@ allprojects {
dependencies {
implementation project(':jpacrepo-impl')
implementation group: 'net.woggioni', name: 'jwo'
implementation group: 'org.slf4j', name: 'slf4j-api'
compileOnly group: 'org.hibernate', name: 'hibernate-jpamodelgen'
// compileOnly group: 'jakarta.persistence',
// name: 'jakarta.persistence-api', version: getProperty('jakarta.persistence.version')
// compileOnly group: 'jakarta.annotation',
// name: 'jakarta.annotation-api',
// version: getProperty('jakarta.annotation.version')
// compileOnly group: 'jakarta.platform',
// name: 'jakarta.jakartaee-web-api',
// version: getProperty('jakarta.ee.version')
compileOnly group: 'jakarta.platform', name: 'jakarta.jakartaee-api'
implementation group: 'org.apache.commons', name: 'commons-compress'
implementation group: 'net.java.dev.jna', name: 'jna'
implementation catalog.jwo
implementation catalog.slf4j.api
// compileOnly group: 'jakarta.inject',
// name: 'jakarta.inject-api', version: getProperty('jakarta.inject.version')
// compileOnly group: 'jakarta.enterprise', name: 'jakarta.enterprise.cdi-api', version: getProperty('jakarta.cdi.version')
compileOnly catalog.hibernate.jpamodelgen
compileOnly catalog.jakarta.enterprise.cdi.api
compileOnly catalog.jakarta.servlet.api
compileOnly catalog.jakarta.ejb.api
compileOnly catalog.jakarta.ws.rs.api
compileOnly catalog.jakarta.xml.bind.api
compileOnly catalog.jakarta.enterprise.concurrent.api
testImplementation group: 'jakarta.platform', name: 'jakarta.jakartaee-api'
// testImplementation group: 'jakarta.platform',
// name: 'jakarta.jakartaee-web-api',
// version: getProperty('jakarta.ee.version')
testImplementation group: 'org.jboss', name: 'jboss-ejb-client'
testImplementation group: 'org.jboss.weld.se', name: 'weld-se-core'
testImplementation group: 'com.h2database', name: 'h2'
testImplementation group: 'org.hibernate', name: 'hibernate-core'
testImplementation group: 'org.jboss.resteasy', name: 'resteasy-client'
testImplementation group: 'org.jboss.resteasy', name: 'resteasy-jackson2-provider'
testRuntimeOnly group: 'org.slf4j', name: 'slf4j-simple'
testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api'
testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params'
testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine'
}
implementation catalog.commons.compress
implementation catalog.jna
wrapper {
distributionType = Wrapper.DistributionType.BIN
gradleVersion = getProperty('gradle.version')
testImplementation catalog.jackson.module.jakarta.xmlbind.annotations
testImplementation catalog.jboss.ejb.client
testImplementation catalog.weld.se.core
testImplementation catalog.h2
testImplementation catalog.hibernate.core
testImplementation catalog.resteasy.client
testImplementation catalog.resteasy.jackson2.provider
testImplementation catalog.jackson.datatype.jsr310
testRuntimeOnly catalog.slf4j.simple
testImplementation catalog.junit.jupiter.api
testImplementation catalog.junit.jupiter.params
testRuntimeOnly catalog.junit.jupiter.engine
}
File nimDir = project.file('nim')

View File

@@ -1,5 +1,3 @@
gradle.version=7.4.2
net.woggioni.gradle.lombok.version=0.1
net.woggioni.gradle.wildfly.version=0.1
net.woggioni.gradle.envelope.version=1.0-SNAPSHOT
@@ -15,10 +13,10 @@ apache.commons.compress.version=1.21
hibernate.version=5.6.5.Final
jzstd.version=0.1-SNAPSHOT
jwo.version=1.0-SNAPSHOT
jakarta.persistence.version=3.0.0
jakarta.inject.version=2.0.0
jakarta.cdi.version=3.0.1
jakarta.annotation.version=2.0.0
jakarta.persistence.version=3.1.0
jakarta.inject.version=2.0.1
jakarta.cdi.version=4.0.1
jakarta.annotation.version=2.1.1
jakarta.ee.version=8.0.0
jaxb.api.version=2.3.1

View File

@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

View File

@@ -3,11 +3,12 @@ plugins {
}
dependencies {
compileOnly group: 'jakarta.platform', name: 'jakarta.jakartaee-api'
compileOnly group: 'javax.xml.bind', name: 'jaxb-api'
compileOnly catalog.jakarta.xml.bind.api
compileOnly catalog.jakarta.ejb.api
compileOnly catalog.jakarta.persistence.api
}
tasks.named(JavaPlugin.COMPILE_JAVA_TASK_NAME, JavaCompile) { JavaCompile j ->
tasks.named(JavaPlugin.COMPILE_JAVA_TASK_NAME, JavaCompile) {
options.compilerArgs += [
'--add-reads', 'net.woggioni.jpacrepo.api=ALL-UNNAMED'
]

View File

@@ -1,6 +1,9 @@
module net.woggioni.jpacrepo.api {
requires static lombok;
requires static java.xml.bind;
requires static jakarta.xml.bind;
requires static jakarta.ejb;
requires static jakarta.persistence;
exports net.woggioni.jpacrepo.api.model;
exports net.woggioni.jpacrepo.api.service;
}

View File

@@ -1,22 +1,26 @@
package net.woggioni.jpacrepo.api.model;
import jakarta.persistence.ElementCollection;
import jakarta.persistence.Entity;
import jakarta.persistence.Access;
import jakarta.persistence.AccessType;
import jakarta.persistence.FetchType;
import jakarta.persistence.NamedQueries;
import jakarta.persistence.NamedQuery;
import jakarta.persistence.PrePersist;
import jakarta.persistence.PreUpdate;
import jakarta.persistence.Table;
import jakarta.persistence.Index;
import jakarta.persistence.EmbeddedId;
import jakarta.xml.bind.annotation.XmlRootElement;
import jakarta.xml.bind.annotation.XmlAccessType;
import jakarta.xml.bind.annotation.XmlAccessorType;
import lombok.Data;
import javax.persistence.Access;
import javax.persistence.AccessType;
import javax.persistence.ElementCollection;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Index;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.PrePersist;
import javax.persistence.PreUpdate;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import java.time.OffsetDateTime;
import java.util.Set;

View File

@@ -1,17 +1,16 @@
package net.woggioni.jpacrepo.api.model;
import jakarta.persistence.Access;
import jakarta.persistence.AccessType;
import jakarta.persistence.Embeddable;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.xml.bind.annotation.XmlAccessType;
import jakarta.xml.bind.annotation.XmlAccessorType;
import jakarta.xml.bind.annotation.XmlRootElement;
import lombok.Data;
import javax.persistence.Access;
import javax.persistence.AccessType;
import javax.persistence.Embeddable;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import java.io.Serializable;
@Data
@Embeddable
@Access(AccessType.FIELD)

View File

@@ -1,9 +1,10 @@
package net.woggioni.jpacrepo.api.service;
import jakarta.ejb.Local;
import net.woggioni.jpacrepo.api.model.PkgData;
import javax.ejb.Local;
import java.util.List;
@Local

View File

@@ -1,6 +1,6 @@
package net.woggioni.jpacrepo.api.service;
import javax.ejb.Remote;
import jakarta.ejb.Remote;
@Remote
public interface PacmanServiceRemote {

View File

@@ -1,6 +1,6 @@
plugins {
id 'java-library'
id "net.woggioni.gradle.envelope"
alias(catalog.plugins.envelope)
}
import net.woggioni.gradle.envelope.EnvelopeJarTask
@@ -8,10 +8,10 @@ import net.woggioni.gradle.envelope.EnvelopeJarTask
dependencies {
implementation project(':jpacrepo-api')
implementation group: 'org.slf4j', name: 'slf4j-api'
implementation group: 'org.apache.logging.log4j', name: 'log4j-slf4j-impl'
implementation catalog.slf4j.api
implementation catalog.log4j.slf4j.impl
runtimeOnly group: 'org.jboss', name: 'jboss-ejb-client'
runtimeOnly catalog.jboss.ejb.client
}
@@ -19,7 +19,7 @@ java {
modularity.inferModulePath = true
}
tasks.named(JavaPlugin.COMPILE_JAVA_TASK_NAME, JavaCompile) { JavaCompile j ->
tasks.named(JavaPlugin.COMPILE_JAVA_TASK_NAME, JavaCompile) {
options.javaModuleMainClass = 'net.woggioni.jpacrepo.client.Main'
// options.compilerArgs += [
// '--add-reads', 'javax.ejb=ALL-UNNAMED'

View File

@@ -3,17 +3,13 @@ plugins {
}
dependencies {
compileOnly group: 'jakarta.platform',
name: 'jakarta.jakartaee-api',
version: getProperty('jakarta.ee.version')
compileOnly catalog.jakarta.persistence.api
implementation group: 'org.tukaani', name: 'xz'
implementation group: 'org.slf4j', name: 'slf4j-api'
implementation group: 'net.woggioni', name: 'jzstd', version: getProperty('jzstd.version')
implementation group: 'net.woggioni', name: 'jwo'
implementation group: 'org.apache.commons',
name: 'commons-compress',
version: getProperty('apache.commons.compress.version')
implementation catalog.xz
implementation catalog.slf4j.api
implementation catalog.jzstd
implementation catalog.jwo
implementation catalog.commons.compress
api project(':jpacrepo-api')
}

View File

@@ -1,5 +1,6 @@
module net.woggioni.jpacrepo.impl {
requires static lombok;
requires jakarta.persistence;
requires net.woggioni.jpacrepo.api;
requires net.woggioni.jwo;
requires net.woggioni.jzstd;

View File

@@ -11,11 +11,22 @@ pluginManagement {
}
gradlePluginPortal()
}
}
plugins {
id "net.woggioni.gradle.lombok" version getProperty('net.woggioni.gradle.lombok.version')
id "net.woggioni.gradle.wildfly" version getProperty('net.woggioni.gradle.wildfly.version')
id "net.woggioni.gradle.envelope" version getProperty('net.woggioni.gradle.envelope.version')
dependencyResolutionManagement {
repositories {
maven {
url = 'https://woggioni.net/mvn/'
content {
includeGroup 'com.lys'
}
}
}
versionCatalogs {
catalog {
from group: 'com.lys', name: 'lys-catalog', version: getProperty('lys.version')
version("slf4j", "1.7.36")
}
}
}

View File

@@ -0,0 +1,17 @@
open module net.woggioni.jpacrepo {
requires static lombok;
requires static jakarta.xml.bind;
requires static jakarta.ejb;
requires static jakarta.persistence;
requires static jakarta.servlet;
requires static jakarta.inject;
requires static jakarta.concurrency;
requires static jakarta.cdi;
requires static jakarta.ws.rs;
requires net.woggioni.jwo;
requires net.woggioni.jpacrepo.impl;
requires org.slf4j;
requires net.woggioni.jpacrepo.api;
}

View File

@@ -1,11 +1,11 @@
package net.woggioni.jpacrepo.factory;
import jakarta.enterprise.inject.Produces;
import jakarta.enterprise.inject.spi.InjectionPoint;
import net.woggioni.jpacrepo.config.AppConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.enterprise.inject.Produces;
import javax.enterprise.inject.spi.InjectionPoint;
public class BeanFactory {

View File

@@ -1,11 +1,11 @@
package net.woggioni.jpacrepo.factory;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.inject.Produces;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;
import net.woggioni.jpacrepo.config.AppConfig;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.inject.Produces;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import java.util.Properties;
public class PersistenceUnitFactory {

View File

@@ -1,14 +1,14 @@
package net.woggioni.jpacrepo.persistence;
import jakarta.persistence.EntityManager;
import jakarta.persistence.TypedQuery;
import jakarta.persistence.criteria.CriteriaBuilder;
import jakarta.persistence.criteria.CriteriaQuery;
import jakarta.persistence.criteria.Predicate;
import jakarta.persistence.criteria.Root;
import net.woggioni.jpacrepo.api.model.PkgData;
import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import java.util.ArrayList;
import java.util.List;

View File

@@ -1,5 +1,25 @@
package net.woggioni.jpacrepo.service;
import jakarta.annotation.Resource;
import jakarta.ejb.Asynchronous;
import jakarta.ejb.ConcurrencyManagement;
import jakarta.ejb.ConcurrencyManagementType;
import jakarta.ejb.Local;
import jakarta.ejb.Lock;
import jakarta.ejb.LockType;
import jakarta.ejb.Remote;
import jakarta.ejb.Schedule;
import jakarta.ejb.Startup;
import jakarta.ejb.TransactionAttribute;
import jakarta.ejb.TransactionAttributeType;
import jakarta.ejb.TransactionManagement;
import jakarta.ejb.TransactionManagementType;
import jakarta.enterprise.concurrent.ManagedExecutorService;
import jakarta.inject.Inject;
import jakarta.inject.Singleton;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.TypedQuery;
import lombok.SneakyThrows;
import net.woggioni.jpacrepo.api.model.PkgData;
import net.woggioni.jpacrepo.api.service.PacmanServiceLocal;
@@ -13,26 +33,7 @@ import net.woggioni.jwo.JWO;
import net.woggioni.jwo.Sup;
import org.slf4j.Logger;
import javax.annotation.Resource;
import javax.ejb.Asynchronous;
import javax.ejb.ConcurrencyManagement;
import javax.ejb.ConcurrencyManagementType;
import javax.ejb.Local;
import javax.ejb.Lock;
import javax.ejb.LockType;
import javax.ejb.Remote;
import javax.ejb.Schedule;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;
import javax.enterprise.concurrent.ManagedExecutorService;
import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.TypedQuery;
import java.nio.file.Files;
import java.nio.file.Path;
import java.time.OffsetDateTime;

View File

@@ -1,5 +1,39 @@
package net.woggioni.jpacrepo.service;
import jakarta.ejb.ConcurrencyManagement;
import jakarta.ejb.ConcurrencyManagementType;
import jakarta.ejb.Singleton;
import jakarta.ejb.TransactionAttribute;
import jakarta.ejb.TransactionAttributeType;
import jakarta.ejb.TransactionManagement;
import jakarta.ejb.TransactionManagementType;
import jakarta.inject.Inject;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.NoResultException;
import jakarta.persistence.NonUniqueResultException;
import jakarta.persistence.TypedQuery;
import jakarta.ws.rs.BadRequestException;
import jakarta.ws.rs.Consumes;
import jakarta.ws.rs.FormParam;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.MatrixParam;
import jakarta.ws.rs.NotFoundException;
import jakarta.ws.rs.OPTIONS;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.PathParam;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.QueryParam;
import jakarta.ws.rs.WebApplicationException;
import jakarta.ws.rs.core.CacheControl;
import jakarta.ws.rs.core.Context;
import jakarta.ws.rs.core.EntityTag;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Request;
import jakarta.ws.rs.core.Response;
import jakarta.ws.rs.core.StreamingOutput;
import jakarta.ws.rs.core.UriInfo;
import lombok.SneakyThrows;
import lombok.val;
import net.woggioni.jpacrepo.api.model.CompressionFormat;
@@ -22,40 +56,7 @@ import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream;
import org.slf4j.Logger;
import javax.ejb.ConcurrencyManagement;
import javax.ejb.ConcurrencyManagementType;
import javax.ejb.Singleton;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;
import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.NoResultException;
import javax.persistence.NonUniqueResultException;
import javax.persistence.TypedQuery;
import javax.ws.rs.BadRequestException;
import javax.ws.rs.Consumes;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.MatrixParam;
import javax.ws.rs.NotFoundException;
import javax.ws.rs.OPTIONS;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.CacheControl;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.EntityTag;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Request;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.StreamingOutput;
import javax.ws.rs.core.UriInfo;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;

View File

@@ -1,7 +1,8 @@
package net.woggioni.jpacrepo.service;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
import jakarta.ws.rs.ApplicationPath;
import jakarta.ws.rs.core.Application;
import java.util.HashSet;
import java.util.Set;

View File

@@ -1,10 +1,10 @@
package net.woggioni.jpacrepo.service.wire;
import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlRootElement;
import net.woggioni.jpacrepo.api.model.PkgData;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.ArrayList;
import java.util.List;

View File

@@ -1,9 +1,8 @@
package net.woggioni.jpacrepo.service.wire;
import jakarta.xml.bind.annotation.XmlRootElement;
import lombok.Data;
import javax.xml.bind.annotation.XmlRootElement;
@Data
@XmlRootElement
public class PkgTuple {

View File

@@ -1,7 +1,8 @@
package net.woggioni.jpacrepo.service.wire;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlRootElement;
import java.util.ArrayList;
import java.util.List;

View File

@@ -1,10 +1,12 @@
package net.woggioni.jpacrepo.servlet;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.ServletContext;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

View File

@@ -1,10 +1,10 @@
package net.woggioni.jpacrepo.servlet;
import jakarta.inject.Inject;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServletRequest;
import net.woggioni.jpacrepo.config.AppConfig;
import javax.inject.Inject;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.nio.file.Path;

View File

@@ -1,5 +1,5 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule;
import com.fasterxml.jackson.module.jakarta.xmlbind.JakartaXmlBindAnnotationModule;
import jakarta.ws.rs.client.Client;
import jakarta.ws.rs.client.ClientBuilder;
import jakarta.ws.rs.client.Entity;
@@ -41,7 +41,7 @@ public class ClientTest {
static {
om = new ObjectMapper();
JaxbAnnotationModule module = new JaxbAnnotationModule();
JakartaXmlBindAnnotationModule module = new JakartaXmlBindAnnotationModule();
om.registerModule(module);
}

View File

@@ -1,9 +1,11 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.module.jakarta.xmlbind.JakartaXmlBindAnnotationModule;
import lombok.SneakyThrows;
import net.woggioni.jpacrepo.api.model.PkgData;
import net.woggioni.jpacrepo.impl.model.CompressionFormatImpl;
import net.woggioni.jpacrepo.impl.model.PkgDataImpl;
import org.junit.jupiter.api.Test;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
@@ -17,11 +19,14 @@ import java.util.regex.Pattern;
public class ParseTest {
@Test
@SneakyThrows
public void test() {
ObjectMapper om = new ObjectMapper();
JaxbAnnotationModule module = new JaxbAnnotationModule();
JakartaXmlBindAnnotationModule module = new JakartaXmlBindAnnotationModule();
om.registerModule(module);
JavaTimeModule javaTimeModule = new JavaTimeModule();
om.registerModule(javaTimeModule);
Pattern pattern = Pattern.compile(".*\\.pkg\\.tar\\.(zst)");
Files.list(Paths.get("/var/cache/pacman/pkg"))
.filter(Files::isRegularFile)