Spring Starterプロジェクトテンプレートを使用してEclipseでプロジェクトを作成しました。
アプリケーションクラスファイルが自動的に作成され、そのパスはPOM.xmlファイルのパスと一致するため、すべて正常です。 Applicationクラスは次のとおりです。
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
//SpringApplication.run(ReconTool.class, args);
ReconTool.main(args);
}
}
これは、私が構築しているコマンドラインアプリです。実行するには、SpringApplication.run行をコメントアウトして、実行する他のクラスのmainメソッドを追加する必要がありました。この簡単なjerry-rig以外に、Mavenを使用してビルドでき、Springアプリケーションとして実行されます。
ただし、その行をコメントアウトする必要はなく、完全なSpringフレームワークを使用する必要があります。これどうやってするの?
このメソッドはSpring Framework全体を起動するため、Application.run()
を実行する必要があります。以下のコードは、main()
をSpring Bootと統合します。
Application.Java
__@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
_
ReconTool.Java
__@Component
public class ReconTool implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
main(args);
}
public static void main(String[] args) {
// Recon Logic
}
}
_
SpringApplication.run(ReconTool.class, args)
この方法は、スプリングが完全に構成されていないためです(コンポーネントスキャンなどはありません)。 run()で定義されたBeanのみが作成されます(ReconTool)。
サンプルプロジェクト: https://github.com/mariuszs/spring-run-magic
を使用して:
@ComponentScan
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
//do your ReconTool stuff
}
}
あらゆる状況で機能します。 IDEからアプリケーションを起動するか、ビルドツールから起動するか。
Mavenを使用する場合は、単にmvn spring-boot:run
gradleではgradle bootRun
Runメソッドの下にコードを追加する代わりに、CommandLineRunner
を実装するSpring Beanがあります。次のようになります。
@Component
public class ReconTool implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
//implement your business logic here
}
}
this Springの公式ガイドリポジトリのガイドをご覧ください。
完全なSpring Bootのドキュメントは here にあります。
もう1つの方法は、アプリケーションを拡張することです(私のアプリケーションは親を継承してカスタマイズすることでした)。親とそのコマンドラインランナーを自動的に呼び出します。
@SpringBootApplication
public class ChildApplication extends ParentApplication{
public static void main(String[] args) {
SpringApplication.run(ChildApplication.class, args);
}
}