Java 如何制作可执行jar?

Java 如何制作可执行jar?,java,executable-jar,Java,Executable Jar,我正在使用Maven创建一个新的web应用程序。我从“spring's guides online”中获得了一些代码,它创建了一个数据库。但是由于某些原因,代码从未运行过 在我的pom.xml中,我包含了以下代码: <properties> <start-class>hello.Application</start-class> </properties> } 我的项目结构如下: 项目名称 src 网络应用 你好

我正在使用Maven创建一个新的web应用程序。我从“spring's guides online”中获得了一些代码,它创建了一个数据库。但是由于某些原因,代码从未运行过

在我的pom.xml中,我包含了以下代码:

   <properties>
    <start-class>hello.Application</start-class>    
   </properties>
}

我的项目结构如下:

项目名称

  • src

    • 网络应用

      • 你好

        • application.java
我对此很陌生,但我不明白为什么它找不到application.java文件。 任何想法都将不胜感激

编辑:这是整个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>embed.tomcat.here</groupId>
 <artifactId>EmbedTomcatNew</artifactId>
 <packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>EmbedTomcatNew Maven Webapp</name>
<url>http://maven.apache.org</url>


  <properties>
    <start-class>hello.Application</start-class>    
</properties>

 <dependencies>
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>3.8.1</version>
    <scope>test</scope>
  </dependency>
 </dependencies>

 <build>
   <finalName>EmbedTomcatNew</finalName>
   <plugins>
           <plugin>
             <groupId>org.apache.tomcat.maven</groupId>
          <artifactId>tomcat7-maven-plugin</artifactId>
          <version>2.2</version>          
          <configuration>   
            <port>9966</port>
          </configuration>
        </plugin>
   </plugins>

   </build>

  </project>

4.0.0
我是汤姆猫
嵌入TomcatNew
战争
0.0.1-快照
EmbeddeTomcatNew Maven Webapp
http://maven.apache.org
你好,申请表
朱尼特
朱尼特
3.8.1
测试
嵌入TomcatNew
org.apache.tomcat.maven
tomcat7 maven插件
2.2
9966
编辑: 我还应该提到,它正在运行一个jsp文件,其中只有打印到浏览器的“hello world”,因此它正在运行,但我希望它首先运行java类。

WAR 您正在构建一个
.war
文件,如
war
定义所示,该文件仅可部署到Web应用程序容器。没有startup类,并且在stackoverflow上有很好的文档记录,在大多数web应用程序容器中都有控制启动顺序的方法

罐子 您必须将项目更改为可执行的
.jar
,并在
jar plugin
配置选项的
Manifest
中指定
main
类。仅仅设置一些随机属性并没有任何作用

您可能希望使用
shade
插件将所有瞬态依赖项捆绑到一个单片
.jar
中,否则您将面临
类路径
安装噩梦

下面是一个例子,从
src/main/webapp
dir运行这个命令是一个不好的不可移植的想法,应该作为参数传入

import java.io.File;
import org.apache.catalina.startup.Tomcat;

public class Main {

    public static void main(String[] args) throws Exception {

        String webappDirLocation = "src/main/webapp/";
        Tomcat tomcat = new Tomcat();

        //The port that we should run on can be set into an environment variable
        //Look for that variable and default to 8080 if it isn't there.
        String webPort = System.getenv("PORT");
        if(webPort == null || webPort.isEmpty()) {
            webPort = "8080";
        }

        tomcat.setPort(Integer.valueOf(webPort));

        tomcat.addWebapp("/", new File(webappDirLocation).getAbsolutePath());
        System.out.println("configuring app with basedir: " + new File("./" + webappDirLocation).getAbsolutePath());

        tomcat.start();
        tomcat.getServer().await();
    }
}

你想干什么?代码不是我们需要看到的,我们需要更多地了解您的
pom.xml
以及您尝试执行应用程序的方式(您是否正在创建一个可运行的jar?)等等。
matt
编辑您的帖子,并放一个适当的标题,反映代码/问题的主题,而不是“为什么它不起作用?”否则,我们将有2^64篇关于此类主题的文章。抱歉,它现在已被编辑。我使用的是嵌入式版本的tomcat,所以只要运行jar文件,它就可以在任何机器上运行。好的,谢谢-问题是我需要能够在任何机器上运行它-所以我把嵌入式tomcat放进去了。我只是在做了修改之后试着运行这个项目,但在编译之后似乎什么也没有运行。现在包装设置为Jar,我还可以使用这个嵌入式tomcat吗?制作一个多模块项目;一个模块制造战争,另一个模块制造发射器。使用maven appassembler插件即可。完全阅读我的答案,您必须遵循所有步骤,并了解如何启动
可执行jar文件
。详细信息非常广泛,超出了stackoverflow的范围。它有很好的文档记录,通过google和一点努力就可以很容易地找到。我已经阅读了它——我现在已经执行了一个jar,并且已经创建了数据库——但是现在tomcat服务器还没有启动。相信我,我在谷歌上度过了最后几天!您必须在代码中启动tomcat服务器,这在嵌入的tomcat指令中非常清楚
import java.io.File;
import org.apache.catalina.startup.Tomcat;

public class Main {

    public static void main(String[] args) throws Exception {

        String webappDirLocation = "src/main/webapp/";
        Tomcat tomcat = new Tomcat();

        //The port that we should run on can be set into an environment variable
        //Look for that variable and default to 8080 if it isn't there.
        String webPort = System.getenv("PORT");
        if(webPort == null || webPort.isEmpty()) {
            webPort = "8080";
        }

        tomcat.setPort(Integer.valueOf(webPort));

        tomcat.addWebapp("/", new File(webappDirLocation).getAbsolutePath());
        System.out.println("configuring app with basedir: " + new File("./" + webappDirLocation).getAbsolutePath());

        tomcat.start();
        tomcat.getServer().await();
    }
}