mirror of
https://github.com/go-i2p/gojava.git
synced 2025-07-03 17:59:42 -04:00
Implemented ability to scan an additional directory for Java files to include in the jar.
This commit is contained in:
40
gojava.go
40
gojava.go
@ -108,6 +108,30 @@ func bindPackages(bindDir, javaDir string, pkgs []*types.Package) ([]string, err
|
|||||||
return javaFiles, nil
|
return javaFiles, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func addExtraFiles(javaDir, scanDir string) error {
|
||||||
|
if scanDir == "" {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
var files []filePair
|
||||||
|
filepath.Walk(scanDir+"/", func(path string, info os.FileInfo, walkErr error) error {
|
||||||
|
if walkErr != nil {
|
||||||
|
return walkErr
|
||||||
|
}
|
||||||
|
if info.IsDir() {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
fileName, err := filepath.Rel(scanDir, path)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if strings.HasSuffix(fileName, ".java") {
|
||||||
|
files = append(files, filePair{filepath.Join(javaDir, fileName), path})
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
return copyFiles(files)
|
||||||
|
}
|
||||||
|
|
||||||
func createSupportFiles(bindDir, javaDir, mainFile string) error {
|
func createSupportFiles(bindDir, javaDir, mainFile string) error {
|
||||||
bindPkg, err := build.Import(reflect.TypeOf(bind.ErrorList{}).PkgPath(), "", build.FindOnly)
|
bindPkg, err := build.Import(reflect.TypeOf(bind.ErrorList{}).PkgPath(), "", build.FindOnly)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -164,6 +188,7 @@ func createJar(target, jarDir string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
w := zip.NewWriter(t)
|
w := zip.NewWriter(t)
|
||||||
|
fmt.Printf("Building %s\n", target)
|
||||||
if err := filepath.Walk(jarDir, func(path string, info os.FileInfo, walkErr error) error {
|
if err := filepath.Walk(jarDir, func(path string, info os.FileInfo, walkErr error) error {
|
||||||
if walkErr != nil {
|
if walkErr != nil {
|
||||||
return walkErr
|
return walkErr
|
||||||
@ -172,6 +197,7 @@ func createJar(target, jarDir string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
fileName, err := filepath.Rel(jarDir, path)
|
fileName, err := filepath.Rel(jarDir, path)
|
||||||
|
fmt.Printf("Adding %s\n", fileName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -196,11 +222,11 @@ func createJar(target, jarDir string) error {
|
|||||||
if err := t.Close(); err != nil {
|
if err := t.Close(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
fmt.Println("created", target)
|
fmt.Printf("Finished building %s\n", target)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func bindToJar(target string, pkgs ...string) error {
|
func bindToJar(target string, scanDir string, pkgs ...string) error {
|
||||||
tmpDir, cleanup, err := initBuild()
|
tmpDir, cleanup, err := initBuild()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -227,6 +253,9 @@ func bindToJar(target string, pkgs ...string) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if err := addExtraFiles(javaDir, scanDir); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
if err := createSupportFiles(bindDir, javaDir, mainFile); err != nil {
|
if err := createSupportFiles(bindDir, javaDir, mainFile); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -307,23 +336,24 @@ const usage = `gojava is a tool for creating Java bindings to Go
|
|||||||
|
|
||||||
Usage:
|
Usage:
|
||||||
|
|
||||||
gojava build [-o <jar>] [<pkg1>, [<pkg2>...]]
|
gojava [-o <jar>] [-s <dir>] build [<pkg1>, [<pkg2>...]]
|
||||||
|
|
||||||
This generates a jar containing Java bindings to the specified Go packages.
|
This generates a jar containing Java bindings to the specified Go packages.
|
||||||
`
|
`
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
o := flag.String("o", "libgojava.jar", "Path to the generated jar file")
|
o := flag.String("o", "libgojava.jar", "Path to the generated jar file")
|
||||||
|
s := flag.String("s", "", "Additional path to scan for Java files")
|
||||||
flag.Usage = func() {
|
flag.Usage = func() {
|
||||||
fmt.Fprintln(os.Stderr, usage)
|
fmt.Fprintln(os.Stderr, usage)
|
||||||
flag.PrintDefaults()
|
flag.PrintDefaults()
|
||||||
}
|
}
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
if len(flag.Args()) < 2 || flag.Args()[0] != "build" {
|
if flag.NArg() < 2 || flag.Args()[0] != "build" {
|
||||||
flag.Usage()
|
flag.Usage()
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
if err := bindToJar(*o, flag.Args()[1:]...); err != nil {
|
if err := bindToJar(*o, *s, flag.Args()[1:]...); err != nil {
|
||||||
fmt.Fprintln(os.Stderr, err)
|
fmt.Fprintln(os.Stderr, err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user