Add a hard dependency on injected client instead of using artifact resolver
This commit is contained in:
47
pom.xml
47
pom.xml
@@ -11,9 +11,9 @@
|
|||||||
<maven.compiler.source>1.8</maven.compiler.source>
|
<maven.compiler.source>1.8</maven.compiler.source>
|
||||||
<maven.compiler.target>1.8</maven.compiler.target>
|
<maven.compiler.target>1.8</maven.compiler.target>
|
||||||
|
|
||||||
|
<rs.version>113-SNAPSHOT</rs.version>
|
||||||
|
|
||||||
<slf4j.version>1.7.12</slf4j.version>
|
<slf4j.version>1.7.12</slf4j.version>
|
||||||
<aether.version>1.1.0</aether.version>
|
|
||||||
<maven.version>3.1.0</maven.version>
|
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<distributionManagement>
|
<distributionManagement>
|
||||||
@@ -23,6 +23,14 @@
|
|||||||
</repository>
|
</repository>
|
||||||
</distributionManagement>
|
</distributionManagement>
|
||||||
|
|
||||||
|
<repositories>
|
||||||
|
<repository>
|
||||||
|
<id>runelite</id>
|
||||||
|
<name>RuneLite</name>
|
||||||
|
<url>http://repo.runelite.net</url>
|
||||||
|
</repository>
|
||||||
|
</repositories>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.slf4j</groupId>
|
<groupId>org.slf4j</groupId>
|
||||||
@@ -34,36 +42,6 @@
|
|||||||
<artifactId>slf4j-simple</artifactId>
|
<artifactId>slf4j-simple</artifactId>
|
||||||
<version>${slf4j.version}</version>
|
<version>${slf4j.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>org.eclipse.aether</groupId>
|
|
||||||
<artifactId>aether-api</artifactId>
|
|
||||||
<version>${aether.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.eclipse.aether</groupId>
|
|
||||||
<artifactId>aether-impl</artifactId>
|
|
||||||
<version>${aether.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.eclipse.aether</groupId>
|
|
||||||
<artifactId>aether-connector-basic</artifactId>
|
|
||||||
<version>${aether.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.eclipse.aether</groupId>
|
|
||||||
<artifactId>aether-transport-http</artifactId>
|
|
||||||
<version>${aether.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.apache.maven</groupId>
|
|
||||||
<artifactId>maven-aether-provider</artifactId>
|
|
||||||
<version>${maven.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.google.code.gson</groupId>
|
|
||||||
<artifactId>gson</artifactId>
|
|
||||||
<version>2.4</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>net.sf.jopt-simple</groupId>
|
<groupId>net.sf.jopt-simple</groupId>
|
||||||
<artifactId>jopt-simple</artifactId>
|
<artifactId>jopt-simple</artifactId>
|
||||||
@@ -75,6 +53,11 @@
|
|||||||
<artifactId>api</artifactId>
|
<artifactId>api</artifactId>
|
||||||
<version>1.0.0-SNAPSHOT</version>
|
<version>1.0.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>net.runelite.rs</groupId>
|
||||||
|
<artifactId>client</artifactId>
|
||||||
|
<version>${rs.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>junit</groupId>
|
<groupId>junit</groupId>
|
||||||
|
|||||||
@@ -1,119 +0,0 @@
|
|||||||
package net.runelite.client;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
|
|
||||||
import org.eclipse.aether.DefaultRepositorySystemSession;
|
|
||||||
import org.eclipse.aether.RepositorySystem;
|
|
||||||
import org.eclipse.aether.RepositorySystemSession;
|
|
||||||
import org.eclipse.aether.artifact.Artifact;
|
|
||||||
import org.eclipse.aether.collection.CollectRequest;
|
|
||||||
import org.eclipse.aether.connector.basic.BasicRepositoryConnectorFactory;
|
|
||||||
import org.eclipse.aether.graph.Dependency;
|
|
||||||
import org.eclipse.aether.graph.DependencyFilter;
|
|
||||||
import org.eclipse.aether.impl.DefaultServiceLocator;
|
|
||||||
import org.eclipse.aether.repository.LocalRepository;
|
|
||||||
import org.eclipse.aether.repository.RemoteRepository;
|
|
||||||
import org.eclipse.aether.repository.RepositoryPolicy;
|
|
||||||
import org.eclipse.aether.resolution.ArtifactResult;
|
|
||||||
import org.eclipse.aether.resolution.DependencyRequest;
|
|
||||||
import org.eclipse.aether.resolution.DependencyResolutionException;
|
|
||||||
import org.eclipse.aether.spi.connector.RepositoryConnectorFactory;
|
|
||||||
import org.eclipse.aether.spi.connector.transport.TransporterFactory;
|
|
||||||
import org.eclipse.aether.transport.http.HttpTransporterFactory;
|
|
||||||
import org.eclipse.aether.util.artifact.JavaScopes;
|
|
||||||
import org.eclipse.aether.util.filter.DependencyFilterUtils;
|
|
||||||
|
|
||||||
public class ArtifactResolver
|
|
||||||
{
|
|
||||||
private final File repositoryCache;
|
|
||||||
private final List<RemoteRepository> repositories = new ArrayList<>();
|
|
||||||
|
|
||||||
public ArtifactResolver(File repositoryCache)
|
|
||||||
{
|
|
||||||
this.repositoryCache = repositoryCache;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<ArtifactResult> resolveArtifacts(Artifact artifact) throws DependencyResolutionException
|
|
||||||
{
|
|
||||||
RepositorySystem system = newRepositorySystem();
|
|
||||||
|
|
||||||
RepositorySystemSession session = newRepositorySystemSession(system);
|
|
||||||
|
|
||||||
DependencyFilter classpathFlter = DependencyFilterUtils.classpathFilter(JavaScopes.COMPILE);
|
|
||||||
|
|
||||||
CollectRequest collectRequest = new CollectRequest();
|
|
||||||
collectRequest.setRoot(new Dependency(artifact, JavaScopes.COMPILE));
|
|
||||||
collectRequest.setRepositories(repositories);
|
|
||||||
|
|
||||||
DependencyRequest dependencyRequest = new DependencyRequest(collectRequest, classpathFlter);
|
|
||||||
|
|
||||||
List<ArtifactResult> results = system.resolveDependencies(session, dependencyRequest).getArtifactResults();
|
|
||||||
validate(results);
|
|
||||||
return results;
|
|
||||||
}
|
|
||||||
|
|
||||||
public DefaultRepositorySystemSession newRepositorySystemSession(RepositorySystem system)
|
|
||||||
{
|
|
||||||
DefaultRepositorySystemSession session = MavenRepositorySystemUtils.newSession();
|
|
||||||
|
|
||||||
LocalRepository localRepo = new LocalRepository(repositoryCache.getAbsolutePath());
|
|
||||||
session.setLocalRepositoryManager(system.newLocalRepositoryManager(session, localRepo));
|
|
||||||
|
|
||||||
//session.setTransferListener(new ConsoleTransferListener());
|
|
||||||
//session.setRepositoryListener(new ConsoleRepositoryListener());
|
|
||||||
|
|
||||||
return session;
|
|
||||||
}
|
|
||||||
|
|
||||||
public RepositorySystem newRepositorySystem()
|
|
||||||
{
|
|
||||||
DefaultServiceLocator locator = MavenRepositorySystemUtils.newServiceLocator();
|
|
||||||
locator.addService(RepositoryConnectorFactory.class, BasicRepositoryConnectorFactory.class);
|
|
||||||
locator.addService(TransporterFactory.class, HttpTransporterFactory.class);
|
|
||||||
|
|
||||||
locator.setErrorHandler(new DefaultServiceLocator.ErrorHandler()
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public void serviceCreationFailed(Class<?> type, Class<?> impl, Throwable exception)
|
|
||||||
{
|
|
||||||
exception.printStackTrace();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return locator.getService(RepositorySystem.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void addRepositories()
|
|
||||||
{
|
|
||||||
repositories.add(this.newCentralRepository());
|
|
||||||
repositories.add(this.newRuneliteRepository());
|
|
||||||
}
|
|
||||||
|
|
||||||
private RemoteRepository newCentralRepository()
|
|
||||||
{
|
|
||||||
return new RemoteRepository.Builder("central", "default", "http://central.maven.org/maven2/").build();
|
|
||||||
}
|
|
||||||
|
|
||||||
public RemoteRepository newRuneliteRepository()
|
|
||||||
{
|
|
||||||
return new RemoteRepository.Builder("runelite", "default", "http://repo.runelite.net/")
|
|
||||||
.setPolicy(new RepositoryPolicy(true, RepositoryPolicy.UPDATE_POLICY_ALWAYS, RepositoryPolicy.CHECKSUM_POLICY_FAIL))
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void validate(List<ArtifactResult> artifacts)
|
|
||||||
{
|
|
||||||
for (ArtifactResult ar : artifacts)
|
|
||||||
{
|
|
||||||
Artifact a = ar.getArtifact();
|
|
||||||
|
|
||||||
if (!a.getGroupId().startsWith("net.runelite"))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (ar.getRepository() instanceof RemoteRepository && !ar.getRepository().equals(newRuneliteRepository()))
|
|
||||||
throw new RuntimeException();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,20 +1,8 @@
|
|||||||
package net.runelite.client;
|
package net.runelite.client;
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
|
||||||
import java.applet.Applet;
|
import java.applet.Applet;
|
||||||
import java.io.File;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
|
||||||
import java.io.InputStreamReader;
|
|
||||||
import java.net.MalformedURLException;
|
import java.net.MalformedURLException;
|
||||||
import java.net.URL;
|
|
||||||
import java.net.URLClassLoader;
|
|
||||||
import java.net.URLConnection;
|
|
||||||
import java.util.List;
|
|
||||||
import org.eclipse.aether.artifact.Artifact;
|
|
||||||
import org.eclipse.aether.artifact.DefaultArtifact;
|
|
||||||
import org.eclipse.aether.resolution.ArtifactResult;
|
|
||||||
import org.eclipse.aether.resolution.DependencyResolutionException;
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
@@ -22,51 +10,19 @@ public class ClientLoader
|
|||||||
{
|
{
|
||||||
private static final Logger logger = LoggerFactory.getLogger(ClientLoader.class);
|
private static final Logger logger = LoggerFactory.getLogger(ClientLoader.class);
|
||||||
|
|
||||||
private static final String CLIENT_ARTIFACT_URL = "https://static.runelite.net/client.json";
|
public Applet load() throws MalformedURLException, ClassNotFoundException, IOException, InstantiationException, IllegalAccessException
|
||||||
|
|
||||||
public Applet load() throws MalformedURLException, ClassNotFoundException, IOException, InstantiationException, IllegalAccessException, DependencyResolutionException
|
|
||||||
{
|
{
|
||||||
ConfigLoader config = new ConfigLoader();
|
ConfigLoader config = new ConfigLoader();
|
||||||
|
|
||||||
config.fetch();
|
config.fetch();
|
||||||
|
|
||||||
ArtifactResolver resolver;
|
|
||||||
if (!RuneLite.getOptions().has("developer-mode"))
|
|
||||||
{
|
|
||||||
resolver = new ArtifactResolver(RuneLite.REPO_DIR);
|
|
||||||
resolver.addRepositories();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
resolver = new ArtifactResolver(new File(System.getProperty("user.home"), ".m2/repository"));
|
|
||||||
|
|
||||||
logger.info("In developer mode, not fetching updates for client");
|
|
||||||
}
|
|
||||||
|
|
||||||
List<ArtifactResult> results = resolver.resolveArtifacts(getClientArtifact());
|
|
||||||
File client = results.get(0).getArtifact().getFile();
|
|
||||||
|
|
||||||
String initialClass = config.getProperty(ConfigLoader.INITIAL_CLASS).replace(".class", "");
|
String initialClass = config.getProperty(ConfigLoader.INITIAL_CLASS).replace(".class", "");
|
||||||
|
|
||||||
URLClassLoader loader = new URLClassLoader(new URL[]{ client.toURI().toURL() }, this.getClass().getClassLoader());
|
Class<?> clientClass = this.getClass().getClassLoader().loadClass(initialClass);
|
||||||
Class<?> clientClass = loader.loadClass(initialClass);
|
|
||||||
|
|
||||||
Applet rs = (Applet) clientClass.newInstance();
|
Applet rs = (Applet) clientClass.newInstance();
|
||||||
|
|
||||||
rs.setStub(new RSStub(config, rs));
|
rs.setStub(new RSStub(config, rs));
|
||||||
|
|
||||||
return rs;
|
return rs;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Artifact getClientArtifact() throws MalformedURLException, IOException
|
|
||||||
{
|
|
||||||
URL u = new URL(CLIENT_ARTIFACT_URL);
|
|
||||||
URLConnection conn = u.openConnection();
|
|
||||||
conn.setRequestProperty("User-Agent", "Mozilla/5.0");
|
|
||||||
try (InputStream i = conn.getInputStream())
|
|
||||||
{
|
|
||||||
Gson g = new Gson();
|
|
||||||
return g.fromJson(new InputStreamReader(i), DefaultArtifact.class);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user