首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用多个包或源文件编译和运行Java代码

如何使用多个包或源文件编译和运行Java代码
EN

Stack Overflow用户
提问于 2013-03-14 13:44:26
回答 3查看 10.7K关注 0票数 2

我一直在自学Java语言,但我只是将Eclipse用作编译和运行项目的一种方法,我想看看如何仅使用命令行编译和运行以下文件结构(我不想简单地从eclipse导出.jar文件)。

文件结构如下:

代码语言:javascript
复制
src/
    model/
        file1.java
        file2.java
    app/
        main.java (contains main method)
        file3.java
        images/
            1.gif
            2.gif
    view/
        file4.java
        file5.java

我也需要编译好的图像文件,因为我用它们做了几件事。我知道应该使用javac命令来构建.class文件,但是我不知道用这种文件结构(以及图像文件)编译(并运行)它的人是谁。任何帮助都将不胜感激。

注意:我正在尝试在Ubuntu 12.04上编译和运行,并且严格使用命令行。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-14 13:53:33

请尝试以下操作

代码语言:javascript
复制
javac -classpath ./lib/*.jar ./src/*/*.java

如果你的java类使用3DParty库,那么给出一个合适的jar库路径。最好使用具有适当目录结构的构建工具。

票数 3
EN

Stack Overflow用户

发布于 2013-03-14 13:51:02

你可以说

代码语言:javascript
复制
javac src/*/*.java

但是,这将是无条件的重新编译,将是恼人的更多的文件,并将打破当你有更多的文件超过命令行可以处理。

明智的做法是使用AntMaven (在大多数情况下,Maven更容易/更好)。您可以编写构建脚本(分别为build.xmlpom.xml )并运行构建器(antmvn)。

票数 0
EN

Stack Overflow用户

发布于 2013-03-14 14:27:45

曾几何时,我用Windows批处理文件编译Java项目。我记得每当我在项目中添加一个新的包时,我不得不回去费力地编辑它们。

有了Linux shell的强大功能,您实际上可以创建一个像样的命令行构建脚本,而不必这样做:

代码语言:javascript
复制
#!/bin/bash

set -e          # quit on error
set -u          # quit if we attempt to use undefined environment variable
set -x          # show commands as they're executed (remove this line if done debugging)

# Run this script from the project root directory

cd src

# Create directory structure
find . -type d | xargs -n 1 -I I --verbose mkdir -p ../dist/class/I

# Use javac to compile files
find . -name "*.java" | javac @/dev/stdin -d ../dist/class

# Copy assets
find . -type f -and -not -name "*.java" | xargs -n 1 -I I --verbose cp I ../dist/class/I

# Jar command
jar cvf ../dist/$(basename $(readlink -f ..)) -C ../dist/class .

您应该将其保存在项目根目录下名为"build.sh“的文件中。这个脚本缺少一些功能。有很多冗长的内容,所以你可以确切地看到发生了什么。它不能很好地处理包含空格或其他奇怪字符的文件名。如果您想要一个可运行的jar文件,则必须编写一个清单文件并将其包含在"jar“命令中。如果您的项目在Java类库之外使用了任何外部依赖项,那么您必须在javac命令行中添加一个-cp开关,或者导出CLASSPATH环境变量。

上面的脚本将把资产复制到jar文件中。假设您在运行时提取资产,这将生成一个文件分发。Stackoverflow可以告诉你更多关于How to Handle Assets in Single File within a Virtual File System in Java的信息。

或者,您可以简单地将资源从源目录复制到目标目录。

作为一个风格问题,大多数人将他们的资产放在与源代码分开的目录中。例如,您的两个.gif文件将位于assets/app/images下,而不是src/app/images下。只要你能说服你的构建系统做你想做的事情,在技术上就没有必要这样做,但我见过的大多数项目都把它们分开。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15402058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档