ClassNotFound из общей библиотеки JAR

Я разработал приложение, которое используется для записи записи в базу данных с log4j2.xml с использованием JDBCAppender. Я следовал следующей инструкции здесь: - http://self-learning-java-tutorial.blogspot.in/2015/10/log4j2-jdbcappender-write-log-messages.html
Мой класс БД ConnectionFactory выглядит следующим образом:

импорт java.sql.Connection;

import java.sql.SQLException;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp.DriverManagerConnectionFactory;
import org.apache.commons.dbcp.PoolableConnection;
import org.apache.commons.dbcp.PoolableConnectionFactory;
import org.apache.commons.dbcp.PoolingDataSource;
import org.apache.commons.pool.impl.GenericObjectPool;
    public class ConnectionFactory {
        private static interface Singleton {
            final ConnectionFactory INSTANCE = new ConnectionFactory();
        }

        private final DataSource dataSource;

        private ConnectionFactory() {
            Properties properties = new Properties();
            properties.setProperty("user", "sa");
            properties.setProperty("password", "Login@123"); // or get properties from some configuration file

            GenericObjectPool<PoolableConnection> pool = new GenericObjectPool<PoolableConnection>();
            DriverManagerConnectionFactory connectionFactory = new DriverManagerConnectionFactory(
                    "jdbc:sqlserver://SERV1-PC\\SQLEXPRESS:1433;databaseName=Anirban;", properties
            );
            new PoolableConnectionFactory(
                    connectionFactory, pool, null, "SELECT 1", 3, false, false, Connection.TRANSACTION_READ_COMMITTED
            );

            this.dataSource = new PoolingDataSource(pool);
        }
       public static Connection getDatabaseConnection() throws SQLException {
            return Singleton.INSTANCE.dataSource.getConnection();
        }
    } 

и мой фрагмент log4j2.xml выглядит следующим образом:

<Appenders>
 <JDBC name="databaseAppender" tableName="LogTable">
   <ConnectionFactory class="ConnectionFactory" method="getDatabaseConnection" />
   <Column name="EVENT_DATE" isEventTimestamp="true" />
   <Column name="LEVEL" pattern="%level" />
   <Column name="LOGGER" pattern="%logger" />
   <Column name="MESSAGE" pattern="%message" />
   <Column name="THROWABLE" pattern="%ex{full}" /> 
  </JDBC>

</Appenders>

<AsyncRoot level="INFO" > 
<AppenderRef ref="databaseAppender" /> 
</AsyncRoot>

Теперь все работает нормально, и я вижу журнал в БД.

Но когда я экспортирую этот проект в виде файла JAR, чтобы сделать его общей библиотекой с общей библиотекой и использую его в других приложениях в качестве зависимости, я сталкиваюсь с ClassNotFoundException.

Таким образом, всякий раз, когда я запускаю приложение, которое имеет этот общий JAR-файл в качестве зависимости, я получаю следующее:

ERROR java.lang.ClassNotFoundException: ConnectionFactory java.lang.ClassNotFoundException: ConnectionFactory
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.Class.forName0(Native Method) 

Я не уверен, почему этот Java-класс ConnectionFactory не попадает в путь к классам в совместно используемом jar, но отлично работает, когда он запускается как приложение, упомянутое выше.

Пожалуйста, предложите, как включить jav-класс ConnectionFactory в classpath в jar? Так нужно ли мне вносить изменения в мой log4j2.xml?

3 ответа

Можете ли вы попробовать использовать полное имя класса? Также убедитесь, что класс доступен по пути xml.

Вам нужно сделать исполняемый файл JAR. Перейдите по ссылке: http://help.eclipse.org/neon/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2Ftasks%2Ftasks-37.htm

Вы выбрали все ресурсы при экспорте jar в Eclipse? Кроме того, проверьте, помогает ли это: Java: экспорт в файл.jar в eclipse

Другие вопросы по тегам