【问题标题】:Executing Swing Application based on Maven and Spring基于 Maven 和 Spring 执行 Swing 应用程序
【发布时间】:2015-09-07 16:02:35
【问题描述】:

我还创建了一个基于 Maven 的 Swing 应用程序,包括 spring,但我不知道如何将它提供给任何人,因为我在那里看不到任何 jar 文件,人们可以在其中单击以执行程序并显示 JFrame。 即使我尝试使用 NetBeans 进行构建,它也只会在目标文件夹下创建一个 jar 文件,但是当我单击它时它什么也没做。

IDE 名称:NetBeans 8 Java 1.7 版

为我的 Maven-Spring 应用程序粘贴了 POM.XML 文件和 XmlConfig 文件,并在我尝试从 CMD 执行时添加了错误。

POM 文件

<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.SQLDemo</groupId>
<artifactId>MOM-TQ</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.2.0.RELEASE</version>
        <type>jar</type>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>4.2.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>4.2.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.36</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>4.2.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>commons-dbcp</groupId>
        <artifactId>commons-dbcp</artifactId>
        <version>1.4</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.6</version>
    </dependency>
</dependencies>
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
</properties>
</project>

XML 配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"

   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd">

<bean id="myBasicDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="${dbDriver}"/>
    <property name="url" value="${dbUrl}"/>
    <property name="username" value="${dbUsername}"/>
    <property name="password" value="${dbPassword}"/>
</bean>

<context:property-placeholder location="src/main/java/com/mom/assets/dbinfo.properties"/>
<context:component-scan base-package="com.mom.tq"></context:component-scan>


<context:annotation-config/>

<bean id="reTableClass" class="com.mom.tq.RETableClass" scope="prototype"/>
<bean id="reTableDAO" class="com.mom.tq.RETableDAO" scope="prototype"/>
<bean id="desktopFrame" class="com.mom.tq.DesktopFrame" scope="prototype"/>
<bean id="internalFrame" class="com.mom.tq.InternalFrame"  scope="prototype"/>
<bean id="batchTableClass" class="com.mom.tq.BatchTableClass" scope="prototype"/>
<bean id="batchTableDAO" class="com.mom.tq.BatchTableDAO" scope="prototype"/>
<bean id="internalBatchForm" class="com.mom.tq.InternalBatchForm" scope="prototype"/>
<bean id="internalDeleteTraineeForm" class="com.mom.tq.InternalDeleteTraineeForm" scope="prototype"/>
<bean id="internalUpdateBatchForm" class="com.mom.tq.InternalUpdateBatchForm" scope="prototype"/>
<bean id="internalUpdateTraineeForm" class="com.mom.tq.InternalUpdateTraineeForm" scope="prototype"/>
<bean id="adminTableClass" class="com.mom.tq.AdminTableClass" scope="prototype"/>
<bean id="adminTableDAO" class="com.mom.tq.AdminTableDAO" scope="prototype"/>
</beans>

【问题讨论】:

  • 分享你的 pom.xml,也许你应该创建一个包含所有依赖项的胖 jar,然后使用 java -jar 运行它。

标签: java spring swing maven


【解决方案1】:

您可以使用maven-assembly-plugin。使用这个插件,您可以创建一个包含所有依赖项的单个 jar,这样您就可以执行它。您还必须定义哪个是您的主类,也就是说,单击您的 jar 工件时必须执行的类。

这里是我开发的一个示例:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.4.1</version>
    <configuration>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <archive>
            <manifest>
                <mainClass>here.put.your.MainClass</mainClass>
            </manifest>
        </archive>
    </configuration>

    <executions>
        <execution>
            <id>make-assembly</id>
            <phase>package</phase> 
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

希望对你有帮助。

【讨论】:

  • 它仍然无法正常工作并给出错误“发生 JNI 错误”实际上我的应用程序也使用 spring 与数据库连接。我认为由于这个原因,它没有向我显示 JFrame,如果我检查错误,它会显示 java.lang.NoClassDefFoundError: org/sspringFramework/context/ApplicationContext
  • 那个类是spring-context依赖的一部分,所以它必须在打包的jar中。当您使用此配置运行 mvn package 时,您会得到两个打包的 jar,其中一个附加了“-jar-with-dependencies.jar”。您是否使用此软件包运行您的应用程序?
  • 是的。所以有2个jar文件。 1“MOM-TQ-1.0-SNAPSHOT.jar”和 2“MOM-TQ-1.0-SNAPSHOT-jar-with-dependencies.jar”。如果我使用命令提示符执行第一个,它会给出消息“No Main Manifest Attribute”。如果我添加清单文件,它会给出错误“发生 JNI 错误”。如果我尝试执行第二个 jar,它会显示一个 JFrame,但是当我单击任何按钮时,它会给出错误“线程“AWT-EventQueue-0”中的异常 org.springframework.beans.factory.BeanDefinationStoreException: IOException parsingng XML Document from class path资源 [mypack/cmlConfigFile.xml];嵌套异常是 java.io.FileNotFoundExcep
  • 这是我要执行的代码:----> private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) { appContext = new ClassPathXmlApplicationContext("mypack/xmlConfigFile.xml" ); InternalFrame frame = appContext.getBean("internalFrame", InternalFrame.class); desktopPane.add(frame);框架.show(); ((FileSystemXmlApplicationContext)appContext).close(); }
  • 正如您所说,当运行带有依赖项的 jar 时,您可以启动应用程序,尽管稍后会出现异常。所以你可以点击并执行你的应用程序,这是你的问题。现在您遇到的异常是告诉您没有找到一个配置文件(似乎是 Spring 的 appContext)mypack/cmlConfigFile.xml。这个文件在jar包里面吗?
猜你喜欢
  • 1970-01-01
  • 2020-09-27
  • 2014-05-10
  • 1970-01-01
  • 2017-11-04
  • 1970-01-01
  • 2011-02-12
  • 2012-05-11
  • 2012-06-25
相关资源
最近更新 更多