Java 如何从Maven项目(如mvn、gradle等)构建CLI?
例如,我有一个名为blabla的Maven项目,我希望通过类似mvn(Maven)或gradle的CLI来控制它(例如,Java 如何从Maven项目(如mvn、gradle等)构建CLI?,java,maven,command-line-interface,Java,Maven,Command Line Interface,例如,我有一个名为blabla的Maven项目,我希望通过类似mvn(Maven)或gradle的CLI来控制它(例如,$mvn clean install,$gradle init等) 而不是发射 $ java BlaBla start 或 等 我想这样做: $ blabla start $ blabla status $ blabla stop 等等 maven项目是否有现成的解决方案?对于maven,请查看,您可以执行以下操作: <project> ... <
$mvn clean install,$gradle init
等)
而不是发射
$ java BlaBla start
或
等
我想这样做:
$ blabla start
$ blabla status
$ blabla stop
等等
maven项目是否有现成的解决方案?对于maven,请查看,您可以执行以下操作:
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
<executions>
<execution>
...
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>com.mycompany.BlaBla</mainClass>
<arguments>
<argument>start</argument>
...
</arguments>
<systemProperties>
<systemProperty>
<key>myproperty</key>
<value>myvalue</value>
</systemProperty>
...
</systemProperties>
</configuration>
</plugin>
</plugins>
</build>
...
</project>
...
org.codehaus.mojo
虽然我不知道与您的问题相关的具体用例,但使用bash脚本或其他专门设计用于运行软件的方式可能是一个更好的主意。Maven和Gradle是构建自动化工具,他们的主要目标不是运行程序,而是编译代码、运行测试和创建工件(以及其他东西)。使用库。它是一个库,您可以像这样构建选项列表(参数、参数等)
package CLi;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import org.apache.poi.EncryptedDocumentException;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
public class CLi
{
/**
* @see http://www.thinkplexx.com/blog/simple-apache-commons-cli-example- java-command-line-arguments-parsing
* @see http://stackoverflow.com/a/10798945
* @see http://stackoverflow.com/questions/36166630/apache-commons-cli- not-parsing-as-expected
*
* Link to Java-Library:
* @see https://commons.apache.org/proper/commons-cli/
*/
/**
* Variables
*/
private String[] args;
private Options options = new Options();
private HelpFormatter formater;
private CommandLineParser parser;
private CommandLine cmd;
private Scanner console;
private String cmdLine;
private boolean noParam;
/**
* Constructor.
* @param args - The command-line arguments.
*/
public CLi(String[] args)
{
this.args = args;
buildCLIOptions();
}
public void parse() throws Exception
{
if(args.length == 0)
{
noParam = true;
args = scanParams();
}
else
{
try
{
parser = new DefaultParser();
cmd = null;
cmd = parser.parse(options, args);
/**
* Print help.
*/
if (cmd.hasOption("help"))
{
noParam = false;
help();
}
/**
* Shutdown.
*/
if (cmd.hasOption("exit"))
{
noParam = false;
System.exit(0);
}
}
}
}
/**
* @throws Exception
*/
public void help() throws Exception
{
/**
* This prints out some help
*/
formater = new HelpFormatter();
formater.printHelp("Main", options);
System.out.println(" ");
noParam = true;
scanParams();
}
/**
* Scan params.
* @return the Parameters
* @throws Exception
*/
public String[] scanParams() throws Exception
{
System.out.println("Ready... Waiting for input...:");
System.out.println(" ");
console = new Scanner(System.in);
while(noParam)
{
cmdLine = console.nextLine();
args = cmdLine.replace(" -", " #-").split(" #");
parse();
}
console.close();
return args;
}
public void buildCLIOptions()
{
options.addOption("exit", "exit", false, "Exiting application.");
options.addOption("help", "help", false, "show help.");
}
}
在主类中,请执行以下操作:
public class Main
{
public static void main(String[] args) throws Exception
{
CLi console = new CLi(args);
console.parse();
}
}
您可以看看,它可以根据名称创建脚本,并支持创建shell和bat变体…我想您可以创建bat或其他脚本。@Stultuske从头开始?为什么不?你认为你需要多少行代码?如果我不懂bash怎么办?学习一下它没什么错非常有用的库,谢谢。但无论如何,我需要bash脚本从命令行启动。我决定创造它。是的,这正是我想要的。谢谢
public class Main
{
public static void main(String[] args) throws Exception
{
CLi console = new CLi(args);
console.parse();
}
}