Я работаю над проектом, который пытается встроить tomcat в веб-приложение Java. Я хочу преобразовать это приложение в java web start, чтобы его можно было развернуть, и любой, кто загружает приложение, мог использовать приложение на встроенном сервере без необходимости загружать tomcat. Проблема, с которой я столкнулся, заключается в том, что код работает отлично, когда я запускаю его в eclipse, но когда я конвертирую его в загружаемый файл, который при запуске показывает ошибку, которую я упомянул в моем заголовке. Ранее у меня была ошибка, в которой говорилось ... java.lang.NoClassDefFoundError: org / apache / catalina / Context Я исправил это, используя файл jar Catalina в качестве одного из моих ресурсов href в файле jnlp. Это исключение LifecycleException, насколько мне известно, является частью Catalina.jar. Пожалуйста, помогите в решении моей ошибки или, по крайней мере, укажите мне правильное направление ее решения. Я запускаю код, используя проект maven в Eclipse IDE. Спасибо!
package com.N.VJ;
import java.io.File;
import javax.servlet.ServletException;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.startup.Tomcat;
public class App {
public static void main(String[] args) throws LifecycleException,
InterruptedException, ServletException {
String docBase = "src/main/webapp/";
Tomcat tomcat = new Tomcat();
String webPort = System.getenv("PORT");
if (webPort == null || webPort.isEmpty()) {
webPort = "8088";
}
tomcat.setPort(Integer.valueOf(webPort));
tomcat.addWebapp("/", new File(docBase).getAbsolutePath());
System.out.println("configuring app with basedir: " + new File("./" +
docBase).getAbsolutePath());
tomcat.start();
tomcat.getServer().await();
}
}
pom.xml
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.tom1</groupId>
<artifactId>cat1</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>cat1 Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-logging-juli</artifactId>
<version>${tomcat.version}</version>
</dependency>
</dependencies>
<build>
<finalName>cat1</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.tom1.cat1.App</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.0</version>
<configuration>
<port>${tomcat.port}</port>
<path>/</path>
</configuration>
<executions>
<execution>
<id>tomcat-run</id>
<goals>
<goal>exec-war-only</goal>
</goals>
<phase>package</phase>
<configuration>
<path>/</path>
<port>${tomcat.port}</port>
<attachArtifactClassifierType>war</attachArtifactClassifierType>
<mainClass>org.apache.tomcat.maven.runner.Tomcat8RunnerCli</mainClass>
<extraDependencies>
<extraDependency>
<groupId>com.nitorcreations</groupId>
<artifactId>tomcat8-war-runner</artifactId>
<version>1.0</version>
</extraDependency>
</extraDependencies>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-util</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-coyote</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-api</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-dbcp</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-servlet-api</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jsp-api</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jasper</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jasper-el</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-el-api</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-catalina</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-tribes</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-catalina-ha</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-annotations-api</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-juli</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-logging-juli</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-logging-log4j</artifactId>
<version>${tomcat.version}</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<id>tomcat-run</id>
<goals>
<goal>exec-war-only</goal>
</goals>
<phase>package</phase>
<configuration>
<warRunDependencies>
<warRunDependency>
<dependency>
<groupId>com.tom1</groupId>
<artifactId>cat1</artifactId>
<version>4</version>
<type>war</type>
</dependency>
<dependency>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.3-SNAPSHOT</version>
<type>maven-plugin</type>
</dependency>
<contextPath>/</contextPath>
</warRunDependency>
</warRunDependencies>
<enableNaming>true</enableNaming>
<extraDependencies>
<extraDependency>
<groupId>org.apache.derby</groupId>
<artifactId>derby</artifactId>
<version>10.1.3.1</version>
</extraDependency>
<extraDependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4</version>
</extraDependency>
</extraDependencies>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<properties>
<tomcat.version>8.0.48</tomcat.version>
</properties>
</project>
ФАЙЛ JNLP
<?xml version = "1.0" encoding = "utf-8"?>
<jnlp spec = "1.0+"
codebase = "http://localhost:8080/TCApp"
href = "http://localhost:8080/TCApp/SO.jnlp">
<information>
<title>Hello World</title>
<vendor>Noel Joseph</vendor>
<homepage href = "http://localhost:8080/TCApp/display.html" />
<description> Hello World</description>
</information>
<security>
<all-permissions />
</security>
<resources>
<j2se version = "1.4+" href = "http://java.sun.com/products/autodl/j2se"/>
<jar href = "SO.jar" />
<jar href = "catalina-6.0.29.jar" />
<jar href = "catalina-ha-6.0.29.jar" />
</resources>
<application-desc main-class = "com.N.VJ.App"/>
</jnlp>




Привет, ребята, исправили ошибку. Приветствовали новые ошибки, но исправили их. Это было довольно простое удивление, почему я не подумал об этом раньше. Итак, все, что я сделал, это добавил jar href = "в зависимости от того, какой jar был необходим". Итак, в соответствии с тем, что я понял, упаковка выполняется, когда мы создаем jar файл в eclipse, он на самом деле не упаковывает все необходимые jar-файлы или, может быть, это делает, но они бесполезны во время выполнения, поскольку тогда основной класс вызывает необходимые jar-файлы и они пропали без вести. Добавляя эти необходимые jar-файлы в href, они вызываются во время выполнения, и TADA решает ваши проблемы.
В конце мой файл JNLP выглядел так.
<?xml version = "1.0" encoding = "utf-8"?>
<jnlp spec = "1.0+"
codebase = "http://localhost:8080/TCApp"
href = "http://localhost:8080/TCApp/SO.jnlp">
<information>
<title>Hello World</title>
<vendor>Noel Joseph</vendor>
<homepage href = "http://localhost:8080/TCApp/display.html" />
<description> Hello World</description>
</information>
<security>
<all-permissions />
</security>
<resources>
<j2se version = "1.4+" href = "http://java.sun.com/products/autodl/j2se"/>
<jar href = "New3.jar" main = "true"/>
<jar href = "tomcat-catalina-9.0.10.jar" />
<jar href = "javax.servlet.jar" />
<jar href = "javax.servlet-api-3.0.1.jar" />
<jar href = "tomcat-util-9.0.10.jar" />
<jar href = "tomcat-util-scan-9.0.10.jar" />
<jar href = "tomcat-juli-9.0.10.jar" />
<jar href = "tomcat-coyote-9.0.10.jar" />
<jar href = "tomcat-api-9.0.10.jar" />
<jar href = "tomcat-jni-9.0.10.jar" />
<jar href = "tomcat-jsp-api-9.0.10.jar" />
<jar href = "commons-logging-1.2.jar" />
<property name = "sun.java2d.noddraw"
value = "true"/>
</resources>
<application-desc main-class = "com.NO.JO.App"/>
</jnlp>
Я стажируюсь в компании, и это мой проект, поэтому для меня это не имеет значения. Спасибо за информацию, хотя дадим им знать.
Спасибо, что поделились своим решением, и добро пожаловать в SO !. Один комментарий: обратите внимание, что java web start устарел и будет удален в будущих выпусках Java. Так что это может быть только временное решение ...