java.lang.NoClassDefFoundError: org/apache/catalina/LifecycleException

Я работаю над проектом, который пытается встроить tomcat в веб-приложение Java. Я хочу преобразовать это приложение в веб-запуск Java, чтобы его можно было развернуть, и любой, кто загружает приложение, может использовать приложение на встроенном сервере без необходимости загружать 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();
}

}

пом.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>

person NoJo    schedule 19.07.2018    source источник


Ответы (1)


Ребят, исправили ошибку. Приветствовал новые ошибки, но исправил их. Это было довольно простое удивление, почему я не подумал об этом раньше. Так что все, что я сделал, это добавил jar href=" в зависимости от того, какой jar был необходим ". Итак, согласно тому, что я понял, упаковка выполняется, когда мы архивируем файл в eclipse, на самом деле он не упаковывает все необходимые банки или, может быть, делает, но они бесполезны во время выполнения, поскольку именно тогда основной класс вызывает необходимые банки. а их нету. Добавляя эти необходимые банки в 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>
person NoJo    schedule 25.07.2018
comment
Спасибо, что поделились своим решением, и добро пожаловать в SO!. Один комментарий: обратите внимание, что веб-запуск Java устарел и будет удален в будущих выпусках Java. Так что это может быть только временное решение... - person Lonzak; 30.07.2018
comment
Я прохожу стажировку в компании, и это мой проект здесь, так что это действительно не имеет значения для меня. Спасибо за информацию, хотя дам им знать. - person NoJo; 31.07.2018