gpt4 book ai didi

java - 如何制作可执行的jar?

转载 作者:行者123 更新时间:2023-12-01 13:18:03 25 4
gpt4 key购买 nike

我正在使用 Maven 创建一个新的 Web 应用程序。我从'spring's在线指南中获得了一些创建数据库的代码。但是由于某种原因,代码从未运行。

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

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

这是我从 spring 指南中获得的“应用程序”类。

打包你好;

 import java.sql.ResultSet;

public class Application {

public static void main(String args[]) {
// simple DS for test (not for production!)
SimpleDriverDataSource dataSource = new SimpleDriverDataSource();
dataSource.setDriverClass(org.h2.Driver.class);
dataSource.setUsername("sa");
dataSource.setUrl("jdbc:h2:mem");
dataSource.setPassword("");

JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

System.out.println("Creating tables");
jdbcTemplate.execute("drop table customers if exists");
jdbcTemplate.execute("create table customers(" +
"id serial, first_name varchar(255), last_name varchar(255))");

String[] names = "John Woo;Jeff Dean;Josh Bloch;Josh Long".split(";");
for (String fullname : names) {
String[] name = fullname.split(" ");
System.out.printf("Inserting customer record for %s %s\n", name[0], name[1]);
jdbcTemplate.update(
"INSERT INTO customers(first_name,last_name) values(?,?)",
name[0], name[1]);
}

System.out.println("Querying for customer records where first_name = 'Josh':");
List<Customer> results = jdbcTemplate.query(
"select * from customers where first_name = ?", new Object[] { "Josh" },
new RowMapper<Customer>() {
@Override
public Customer mapRow(ResultSet rs, int rowNum) throws SQLException {
return new Customer(rs.getLong("id"), rs.getString("first_name"),
rs.getString("last_name"));
}
});

for (Customer customer : results) {
System.out.println(customer);
}
}

}

我的项目结构如下:

项目名称

  • 源代码

    • 网络应用

      • 你好

        • 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>

编辑:我还应该提到它正在运行一个 jsp 文件 - 其中只有打印到浏览器的“hello world” - 因此它正在运行,但我希望它首先运行 java 类。

最佳答案

war

您正在构建一个 .war文件,如 <packaging>war</packaging> 中所示定义,只能部署到 Web 应用程序容器。没有启动类,并且在 stackoverflow 上有详细记录,有一种方法可以控制大多数 Web 应用程序容器中的启动顺序。

JAR

您必须将项目更改为可执行文件 .jar并指定main Manifest中的类(class)在 jar plugin配置选项。仅设置一些随机属性不会执行任何操作。

您可能想使用shade将所有 transient 依赖项捆绑到一个整体中的插件 .jar否则你有一个 classpath安装是您的噩梦。

这是一个示例,从 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();
}
}

关于java - 如何制作可执行的jar?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22308212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com